修剪密码,是错的吗?

时间:2013-11-14 19:06:51

标签: c#

我遇到一个问题,即新记录的密码不是空白,而是一个空白区域。所以首先想到的是调用Trim()我加载或保存密码的地方,因此不再有空白空间问题了。但是我想知道你做这件事是不是错了?

6 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

好吧,我建议你不要在任何情况下允许这样的短密码。

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

ADDED

读过别人说修剪不好的时候,我仍然说他们错了。如果你总是修剪和使用总是垫,他们的密码将始终有效 - 他们不会知道存储的密码不完全匹配 - 当然,因为你永远不应该存储“密码”只是一个单向的哈希结果,确实知道如何知道密码是什么,只要它是否哈希到正确的哈希值。

答案 3 :(得分:1)

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

除了SecureString之外,还应使用'String'类来存储密码。

答案 4 :(得分:1)

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

答案 5 :(得分: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*