由于某种原因,这对我来说没有意义。当字符串中没有字符可用于哈希时,空字符串如何被哈希?
我的问题看起来像这样:
System.Web.Helpers.Crypto.HashPassword(string.Empty);
这怎么可能实现?
由于某种原因,这对我来说没有意义。当字符串中没有字符可用于哈希时,空字符串如何被哈希?
我的问题看起来像这样:
System.Web.Helpers.Crypto.HashPassword(string.Empty);
来自MSDN:
密码哈希是使用RFC 2898算法生成的,该算法使用128位盐、256位子密钥和1000次迭代。生成的哈希字节流的格式为{0x00,salt,subkey},在返回之前进行base-64编码。
首先,您需要了解RFC 2898的工作原理。简而言之,它将盐与传入的密码组合,对其进行多次哈希,并产生一个字节流,可以读取尽可能多的字节。
使用上述引用文档,我们可以看到它选择一个128位大的随机盐,在结尾处使用1000个哈希值,并从流中提取256位。
因为RFC 2898允许您从函数的输出中获取任意数量的字节,所以我们可以获取字符。它的输出不是固定的。如果我们两次调用Crypto.HashPassword(string.Empty);
,我们也会得到不同的输出,因为每次调用该函数时都会选择一个新的随机盐。