SHA计算随机长度的哈希值

时间:2013-05-15 09:57:07

标签: c# random hash cryptography sha

最近,我注意到SHA算法计算随机长度的哈希值。

HashAlgorithm provider;
provider = HashAlgorithm.Create("System.Security.Cryptography.SHA256");

while(!stackoverflow) {
    Console.WriteLine(Encoding.UTF8.GetString(
         provider.ComputeHash(Encoding.UTF8.GetBytes(
              (new Random()).Next().ToString())))
         .Count().ToString());
}

输出:

29
29
30
29
29
30
29
31
29
29
32
29
30
28
...

是否可以设置最大哈希长度? (可能使哈希无用..)或者我在计算哈希值时做错了什么?编码

修改

上面的代码段只是一个例子。我最终需要的是一个接受字符串的方法,计算字符串的散列并返回它。 HashAlgorithm.ComputeHash占用字节并返回字节,因此我使用UTF8.GetBytes() / UTF8.GetString()进行转换,这似乎是一个巨大的错误。

1 个答案:

答案 0 :(得分:5)

SHA1-256哈希值总是32个字节。你在这里做的是你试图将这些字节解释为UTF-8编码文本,这是完全错误的,因为绝对不能保证散列字节是有效的UTF8编码序列。

即使有这样的保证,UTF-8也是一种可变长度编码:当将原始字节转换为Unicode字符时,每个字符“使用”一个可变数量的字节(1到4),因此输出来自理论上,代码可以在8到32之间。

一般来说,这个例子没有意义。请澄清你的意图。