设置SaltEnabled时,如何在Microsoft Enterprise Library中的HashProvider中生成salt?
新机器是随机的吗?这是一个神奇的数字吗?
(我知道什么是盐,问题是企业库HashProvider中盐的实际价值是多少)
答案 0 :(得分:4)
编辑:
有关示例实现,请参阅Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.HashAlgorithmProvider。哈希步骤是:
要与散列文本进行比较,您必须使用:
public bool CompareHash(byte[] plaintext, byte[] hashedtext)
与重新比较和比较。如果你重新散列,会产生一个新的随机盐,你就会丢失。
CompareHash执行以下操作:
原件:
“如果在HashProvider上启用了salt,则提供程序将生成一个随机的字节序列,这些字节将被添加到散列中。如果将散列值与未散列值进行比较,则将从散列值中提取salt并且在比较之前用于散列未散列的值。“
和
“至于解码为哈希值。这是不可能的。在创建哈希之后,应该无法将其反转为原始值。 但是,您可以做的是将未散列值与散列值进行比较,方法是将其放在同一算法中并比较输出。“
来自http://www.codeplex.com/entlib/Thread/View.aspx?ThreadId=10284
答案 1 :(得分:0)
稍微偏离主题:
这种盐用于防止彩虹攻击。彩虹攻击是一种尝试,根据预先计算的哈希值非常大(通常为几十亿字节)的字典,找出计算此哈希值的字符串。
'Uncle' Jeff有blog entry about this。
此外,您可以查找维基百科:
答案 2 :(得分:0)
所以我猜错了几年,但我的理解是每次创建哈希时都会创建一个新的随机盐值。
答案 3 :(得分:0)
我回答了有关企业库及其用于散列的salt值的类似问题。
您可以在此处查看:https://stackoverflow.com/a/27247012/869376
亮点:
CryptographyUtility.GetRandomBytes(16);
命名空间中的Microsoft.Practices.EnterpriseLibrary.Security.Cryptography
方法生成的。这最终调用名为[DllImport("QCall", CharSet = CharSet.Unicode)]
private static extern void GetBytes(SafeProvHandle hProv, byte[] randomBytes, int count);