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