2012-01-04 71 views
0

如果我想以下结果:十六进制表示问题

RIPEMD-160("The quick brown fox jumps over the lazy dog") = 
37f332f68db77bd9d7edd4969571ad671cf9dd3b 

我尝试这样做:

string hash11 = System.Text.Encoding.ASCII.GetString(RIPEMD.ComputeHash(Encoding.ASCII.GetBytes("The quick brown fox jumps over the lazy dog"))); 

,但它不给我一个结果!

回答

1

ComputeHash函数为您提供一个字节数组(0x37,0xF3,...)。如果使用GetString,它将获取字节中的每个值并使用具有该值的字符,但不会将该值转换为字符串。

你可以把它转换这样的:

var bytes = RIPEMD.ComputeHash(Encoding.ASCII.GetBytes("The quick brown fox jumps over the lazy dog")); 
string hash11 = ""; 
foreach(var curByte in bytes) 
    hash11 = curByte.ToString("X2") + hash11; // or curByte.ToString("X") if for example 9 should not get 09 

就像你有一开始的最高字节。随着

hash11 += curByte.ToString("X2") 

你必须在一开始的最低字节。

+0

'3BDDF91C67AD719596D4EDD7D97BB78DF632F337' ! – 2012-01-04 08:25:03

+0

叶,这就是正确的字符串,就从后面看它: 37F332F68DB77BD9D7EDD4969571AD671CF9DD3B 正如我在回答说,你需要附加的字节要么在字符串的结尾开始,这取决于你想要的是最高字节第一或持续。 – Muepe 2012-01-04 08:40:47

+0

我想以下几点: '37f332f68db77bd9d7edd4969571ad671cf9dd3b' – 2012-01-04 08:50:11

1

你想获得什么是字节数组的十六进制表示:每个字节应该由它的两个字符的十六进制值来表示。

你可以检查this thread几个不同的例子如何做到这一点。