4

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

4

6 回答 6

12

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

于 2013-11-14T19:08:52.247 回答
3

这是错误的,因为您没有让用户知道正在存储的密码与他/她输入的密码不同...您可以使用String.IsNullOrWhiteSpace进行服务器端检查,如另一个答案中所述, 你不应该把它存储在纯文本中

于 2013-11-14T19:10:42.877 回答
2

好吧,我建议您在任何情况下都不要使用这么短的密码。

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

添加

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

于 2013-11-14T19:11:42.743 回答
1

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

此外,应该使用SecureString而不是 'String' 类来存储密码。

于 2013-11-14T19:10:16.143 回答
1

我建议您对密码验证设置最小字符限制或验证,而不是修剪。

于 2013-11-14T19:11:16.037 回答
1

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

这是一个简单的代码来做到这一点:

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*
于 2013-11-14T19:12:29.227 回答