如何对`string.Empty`进行哈希处理?

时间:2014-01-03 22:51:10

标签: c# .net string hash cryptography

出于某种原因,这对我来说没有意义。当string中没有char来散列时,空string如何散列?

我所说的将是这样的:

System.Web.Helpers.Crypto.HashPassword(string.Empty);

这怎么可能?

1 个答案:

答案 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);,我们也会获得不同的输出,因为每次调用函数时它都会选择一个新的随机盐。