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”)代码>相反,反之亦然。