C# 如何对'string.Empty'进行散列?

C# 如何对'string.Empty'进行散列?,c#,.net,string,hash,cryptography,C#,.net,String,Hash,Cryptography,出于某种原因,这对我来说没有意义。当字符串中没有要散列的字符时,如何对空字符串进行散列 我说的是这样的: System.Web.Helpers.Crypto.HashPassword(string.Empty); 这怎么可能呢?来自: 密码散列由RFC2898算法使用128位salt、256位子密钥和1000次迭代生成。生成的hash bytestream的格式为{0x00,salt,subkey},在返回之前对其进行base-64编码 首先,你需要了解怎么做。简而言之,它将salt与传入的密

出于某种原因,这对我来说没有意义。当
字符串
中没有要散列的
字符时,如何对空
字符串
进行散列

我说的是这样的:

System.Web.Helpers.Crypto.HashPassword(string.Empty);
这怎么可能呢?

来自:

密码散列由RFC2898算法使用128位salt、256位子密钥和1000次迭代生成。生成的hash bytestream的格式为{0x00,salt,subkey},在返回之前对其进行base-64编码

首先,你需要了解怎么做。简而言之,它将salt与传入的密码结合起来,对其进行多次散列,并生成一个bytestream,您可以根据需要读取任意多个字节

使用上面引用的文档,我们可以看到它选择了一个128位的随机salt,使用1000个散列,最后从流中提取256位


所以我们可以获取字符,因为RFC2898允许您从函数的输出中获取任意多的字节,它不是一个固定的输出。如果调用
Crypto.HashPassword(string.Empty),我们也会得到不同的输出两次,因为每次调用函数时它都会选择一个新的随机salt。

通常,哈希函数通过更新一些内部状态来处理数据。如果没有要处理的数据,则最终状态与初始状态相同。如果没有要计数的字符,如何计算string.empty.length?在这种情况下,短字符串(包括空字符串)将简单地用0x00字节填充,直到64字节长,还要注意,哈希函数仍然是在空输入上定义的。例如,您可以对零字节文件或零长度字符串进行散列,它们应提供相同的输出。大多数散列函数对数据块进行操作,不完整的块通常会填充一组0字节值,以转到下一个较大的块大小。但是,请参见您感兴趣的任何哈希的规范,以了解确切的过程,上面只是一般的“大多数哈希都做什么”指南。