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