C# 函数,通过将结果2转换回字节数组,可以得到结果2

C# 函数,通过将结果2转换回字节数组,可以得到结果2,c#,hash,C#,Hash,如果代码2的目的是将散列呈现为可打印的字符串,那么base64编码是一个更好的主意(googleit)(当然,可打印的十六进制编码也可以) 此外,代码1和代码2在开始时使用不同的编码。如果传递给代码1/2的字符串中包含unicode,而不仅仅是纯ASCII,则会立即对不同的内容进行哈希运算,这是不可调和的。您所说的“使用result2计算result1”的确切含义是什么?0x7f是十六进制数7f。f是15,7是7,所以二进制中它应该是0111111,十进制中它应该是127,ascii平均值(de

如果代码2的目的是将散列呈现为可打印的字符串,那么base64编码是一个更好的主意(googleit)(当然,可打印的十六进制编码也可以)


此外,代码1和代码2在开始时使用不同的编码。如果传递给代码1/2的字符串中包含unicode,而不仅仅是纯ASCII,则会立即对不同的内容进行哈希运算,这是不可调和的。

您所说的“使用result2计算result1”的确切含义是什么?0x7f是十六进制数7f。f是15,7是7,所以二进制中它应该是0111111,十进制中它应该是127,ascii平均值(del)中它应该是127number@legendinmaking它在ASCII中的意思是0x7f,但在本上下文中没有意义(不被解释为ASCII):“用result2计算result1”的确切含义是什么?0x7f是十六进制数字7f。f是15,7是7,所以二进制中它应该是0111111,十进制中它应该是127,ascii平均值(del)中它应该是127number@legendinmaking它在ASCII中的意思是0x7f,但在本上下文中没有意义(不被解释为ASCII):)meh;base-64有12个字符(base-64有28个,十六进制有40个),但很难说base64比十六进制“更好”。它们都以一种完美的圆形可折叠方式传输数据。我没有说base64比hex好——我说它比抛出哈希值的1/8信息要好!:)无聊的;base-64有12个字符(base-64有28个,十六进制有40个),但很难说base64比十六进制“更好”。它们都以一种完美的圆形可折叠方式传输数据。我没有说base64比hex好——我说它比抛出哈希值的1/8信息要好!:)
byte[] bs = System.Text.Encoding.UTF8.GetBytes(input);
SHA1CryptoServicesProvider x = new SHA1CryptoServicesProvider();
bs = x.ComputeHash(bs);
System.Text.StringBuilder s = new System.Text.StringBuilder();
foreach (byte b in bs)
   s.Append(b.ToString("x2").ToLower());
result1 = s.ToString();
byte[] bs = System.Text.ASCIIEncoding.GetBytes(input);
SHA1CryptoServicesProvider x = new SHA1CryptoServicesProvider();
bs = x.ComputeHash(bs);
char[] c = new char[bs.length]
for(int i=0; i<bs.length; i++)
  c[i] = (char)(bs[i] & 0x7f);
resutl2 = new StringBuilder().Append(c).ToString();
result1 == map(result2)
result2 = new string(c);