SHA计算随机长度的哈希值

Atr*_*gma 2 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());
}
Run Code Online (Sandbox Code Playgroud)

输出:

29
29
30
29
29
30
29
31
29
29
32
29
30
28
...
Run Code Online (Sandbox Code Playgroud)

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

编辑:

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

Jon*_*Jon 5

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

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

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

  • 呃.好吧,现在我感到惭愧.当然,我无法将非文本一次的二进制数据转换为带编码的字符串.你是对的,这没有意义.感谢您的帮助,也感谢您的链接.非常有帮助. (2认同)