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

Keh*_*mme 3 .net c# string hash cryptography

出于某种原因,这对我来说没有意义.string当哈希中没有chars 时,如何进行空string哈希?

我所说的将是这样的:

System.Web.Helpers.Crypto.HashPassword(string.Empty);
Run Code Online (Sandbox Code Playgroud)

这怎么可能?

Sco*_*ain 6

来自MSDN:

密码哈希是使用RFC 2898算法使用128位盐,256位子密钥和1000次迭代生成的.生成的哈希字节流的格式为{0x00,salt,subkey},在返回之前进行base-64编码.

首先,您需要了解RFC 2898的工作原理.简而言之,它将salt与传入的密码相结合,对其进行多次哈希处理,并生成一个字节流,您可以根据需要读出多个字节.

使用上面引用的文档,我们看到它选择128位大的随机盐,使用1000个哈希值,并在末尾从流中拉出256位.

因此我们可以将字符排除,因为RFC 2898允许您从函数的输出中获取所需的字节数,它不是固定输出.如果我们调用Crypto.HashPassword(string.Empty);两次,我们也会获得不同的输出,因为每次调用函数时它都会选择一个新的随机盐.