出于某种原因,这对我来说没有意义。当string
中没有char
来散列时,空string
如何散列?
我所说的将是这样的:
System.Web.Helpers.Crypto.HashPassword(string.Empty);
这怎么可能?
答案 0 :(得分:6)
来自the MSDN:
密码哈希是使用RFC 2898算法使用128位盐,256位子密钥和1000次迭代生成的。生成的哈希字节流的格式为{0x00,salt,subkey},在返回之前进行base-64编码。
首先,您需要了解RFC 2898 works的方式。简而言之,它将salt与传入的密码相结合,对其进行多次哈希处理,并生成一个字节流,您可以根据需要读出多个字节。
使用上面引用的文档,我们看到它选择一个128位大的随机盐,使用1000个哈希值,最后从流中拉出256位。
因此我们可以将字符排除,因为RFC 2898允许您从函数的输出中获取任意数量的字节,它不是固定输出。如果我们两次调用Crypto.HashPassword(string.Empty);
,我们也会获得不同的输出,因为每次调用函数时它都会选择一个新的随机盐。