最近,我注意到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()
进行转换,这似乎是一个巨大的错误。
答案 0 :(得分:5)
SHA1-256哈希值总是32个字节。你在这里做的是你试图将这些字节解释为UTF-8编码文本,这是完全错误的,因为绝对不能保证散列字节是有效的UTF8编码序列。
即使有这样的保证,UTF-8也是一种可变长度编码:当将原始字节转换为Unicode字符时,每个字符“使用”一个可变数量的字节(1到4),因此输出来自理论上,代码可以在8到32之间。
一般来说,这个例子没有意义。请澄清你的意图。