我遇到了一个问题,即新记录的密码不是空白,而是一个空格。所以我首先想到的是在加载或保存密码时调用Trim()
函数,这样就不会再有空格的问题了。但我想知道您是否认为这样做是错误的?
我遇到了一个问题,即新记录的密码不是空白,而是一个空格。所以我首先想到的是在加载或保存密码时调用Trim()
函数,这样就不会再有空格的问题了。但我想知道您是否认为这样做是错误的?
您不应该以明文方式存储密码。
这是错误的,因为您没有告知用户存储的密码与其输入的不同... 您可以使用String.IsNullOrWhiteSpace进行服务器端检查,并且如其他答案所述,不应该以明文形式存储密码
我建议您不要允许使用太短的密码。
此外,根据我的经验,用户输入密码时往往不会有意识地在密码前后添加空格。但是,如果您要求用户输入两次密码,那么用户不太可能不小心两次填写他们想要的密码(除非他们使用剪贴板粘贴)。然而,由于这也是一种常见做法,我总是修剪密码的前导/尾随空格 -- 内部空格应该保留。
补充
虽然其他人说修剪字符串是不好的,但我仍然认为他们是错的。如果您总是修剪并且始终填充,他们的密码将始终有效--他们不会知道存储的密码不是完全匹配的--当然,因为您永远不应该存储“密码”,只需要对结果进行单向哈希处理,所以真正的密码是无法知道的,只能知道它是否哈希到正确的哈希值。
正确的做法(至少是最佳实践之一)是尝试加密然后哈希密码。即使是最简单的密码,甚至是一个简单的空格,加密后也会生成一个非空格字符串。
以下是一个简单的代码:
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*
空格是密码中有效的字符。因此,您不应该去掉它。
此外,存储密码应该使用SecureString而不是'String'类。