C# 十六进制表示问题

C# 十六进制表示问题,c#,asp.net,encoding,hash,ripemd,C#,Asp.net,Encoding,Hash,Ripemd,如果我想要以下结果: 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 t

如果我想要以下结果:

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")));

但是它没有给我以前的结果

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")

开头是最低的字节。

您想要得到的是字节数组的十六进制表示法:每个字节都应该由其两个字符的十六进制值表示


您可以查看几个不同的示例,了解如何执行此操作。

3BDDF91C67AD719596D4EDD7D97BB78DF632F337
!!是的,这是正确的字符串,只要从后面读它:37F332F68DB77BD9D7EDD4969571AD671CF9DD3B正如我在回答中所说的,你需要在字符串的开头或结尾追加字节,这取决于你想要的是第一个还是最后一个最高的字节。我想要以下内容:
37F332F68DB77BD9D7EDD4969571AD671CF9DD3B
,现在有什么问题?是因为字母是大写的吗?如果是这样,您可以使用
ToString
中的
X
来操纵它。使用
X
给出大写,
X
给出小写/编辑:阅读你的其他评论:那就用另一种方式吧。如果现在使用
hash11=curByte.ToString(“X2”)+hash11使用hash11+=corbyte.ToString(“X2”)相反,反之亦然。