C# 修改密码,错了吗?

C# 修改密码,错了吗?,c#,C#,我有一个问题,新记录的密码不是空的,而是一个空白。所以首先想到的是调用Trim(),在这里我加载或保存密码,这样就不会再有空格问题了。但我想听听你对这是否是一件错误的事情的看法 您不应该以纯文本形式存储密码。空格是密码的有效字符。所以你不应该修剪它 应该使用Addition而不是“String”类来存储密码。这是错误的,因为您没有让用户知道存储的密码与他/她输入的密码不同。。。您可以使用进行服务器端检查,正如另一个答案中所述,您不应该将其存储为纯文本。我建议您对密码验证设置最小字符限制或验证,而

我有一个问题,新记录的密码不是空的,而是一个空白。所以首先想到的是调用
Trim()
,在这里我加载或保存密码,这样就不会再有空格问题了。但我想听听你对这是否是一件错误的事情的看法

您不应该以纯文本形式存储密码。

空格是密码的有效字符。所以你不应该修剪它


应该使用Addition而不是“String”类来存储密码。

这是错误的,因为您没有让用户知道存储的密码与他/她输入的密码不同。。。您可以使用进行服务器端检查,正如另一个答案中所述,您不应该将其存储为纯文本。我建议您对密码验证设置最小字符限制或验证,而不是修剪。好的,我建议您在任何情况下都不允许使用如此短的密码

此外,根据我的经验,密码上的前导空格和尾随空格几乎总是用户无意的。但是,如果您需要输入两次密码,则用户不太可能意外地将其预期密码输入两次(除非使用剪切/粘贴来填写)。然而,由于这也是一种常见的做法,我总是从密码中删除前导/尾随空格--内部空格应该保留

增加

看过别人说修剪不好,我还是说他们错了。如果你总是修剪并使用always pads,他们的密码将始终有效--他们不会知道存储的密码不是完全匹配的--当然,因为你永远不应该存储“密码”只是结果的单向散列,因此确实有办法知道密码是什么,不管它是否散列到正确的散列值。

正确的行为(至少是一种最佳实践)是尝试加密密码,然后散列密码。即使加密最简单的密码,即使是一个简单的空白也会创建一个非空白字符串

下面是一个简单的代码:

public static string Hash(this string text)
{
    HashAlgorithm algorithm = algorithm = MD5.Create(); ;
    // Adding something (salt) to text to make it harder to guess
    text += "some-salt";
    //return algorithm.ComputeHash(text.ToBytes()).GetString().ToBase64();
    return Encoding.UTF8.GetString(algorithm.ComputeHash(Encoding.UTF8.GetBytes(text)));
}
在空白处调用此函数,结果是:

var result = " ".Hash();
// Xd�m���SJ�l|r�Z*

如果你修剪他故意放在那里的结尾空间,用户怎么知道他的密码?人们的密码开头或结尾都有空格,所以不需要修剪,也不在计划文本中存储密码。我投票赞成重新打开。虽然OP征求了意见,但这个问题是关于一个最佳实践的,真的。谷歌确实修剪了密码。。。不管是错是错,但这并不是一个广泛使用的标准。不能指望空格不是密码字符。有些认证系统允许,有些则不允许。要详细说明这一点,请使用具有合理工作量的PBKDF2、bcrypt或scrypt(含salt)。这样你就不会有这样的“问题”。是的,但它不能回答问题。