密码应该比较文化特定还是二元相等?

时间:2015-01-23 11:30:38

标签: c# string passwords change-password

众所周知,有不同的方法来比较unicode中的字符串。其中之一是文化特定。这也是.Net中的一个很好的主题。

我目前所处的地方是必须比较两个密码的平等和不平等。 (不,不要与商店进行比较 - 这是完成盐渍和散列!)所以这是更改密码对话框。

问题:它应该是文化特定的还是不可知的(例如在C#string.Compare()(==)或string.CompareOrdinal()?

有什么影响?

显然哈希是文化无关的(至少在.Net中)?

2 个答案:

答案 0 :(得分:3)

它应匹配将针对散列版本测试的相等性。

基本上,假设存储了其中一个密码,并且您尝试使用另一个密码登录 - 它会起作用吗?这肯定是你想要测试的。

我个人很想用他们在其他地方使用的完全相同的代码来哈希,并比较结果 - 这样你就可以保证与你真正关心的东西保持一致。

答案 1 :(得分:0)

您指定了更改密码对话框,因此我将解决该问题。

由于他们在更改密码对话框中输入密码的唯一目的是将该密码加密并使用足够数量的BCrypt,SCrypt或PBKDF2进行散列,并且因为所有这三个密码都使用基于字节操作的基元或字节组(即它们在1和0上工作),如果它们的位相同,则密码只相同。

因此,您必须使用二进制相等。

更实际的是,由于他们只是背靠背地输入两次,你应该期望并强制他们每次都以完全相同的方式输入它!

是的,散列是文化无关的,因为散列操作的是位和字节,而不是符号或含义,甚至不是字符。