我有一个问题,新记录的密码不是空白,而是一个空格。所以首先想到的是调用Trim()
我加载或保存密码的位置,这样就不会再有空格问题了。但我想听听你对这样做是否错误的看法?
user2740190
问问题
367 次
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
空格是密码的有效字符。所以你不应该修剪它。
于 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 回答