从byte []到String消化消息和最佳编码

时间:2011-03-02 20:08:48

标签: c# .net bouncycastle digest

场合

我在C#项目中使用Bouncy Castle API。我需要使用String

Org.BouncyCastle.Crypto进行哈希处理

我的样本

String msg = "Message to Hash"; 
MD5Digest dig = new MD5Digest(); 

byte[] msgBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(msg);
dig.BlockUpdate(msgBytes, 0, msgBytes.Length);
byte[] result = new byte[dig.GetDigestSize()]; 
dig.DoFinal(result, 0);
Console.WriteLine("{0}", Convert.ToBase64String(result));

结果我的哈希看起来像XasdDdflk7ghXi8azuhe==

问题

  1. 在任何不同的消息结尾处,我总是得到“==”。这是正常的吗?
  2. 我尝试使用byte[]String转换为System.Text.ASCIIEncoding.ASCII.GetString(),但我得到的符号如“!?...”我想最后避免使用“==”。我该怎么办 ?改变编码器?

2 个答案:

答案 0 :(得分:2)

==是基础64 padding结果的结果。如果你愿意,你可以剥掉它们。

答案 1 :(得分:0)

您可能需要摘要的十六进制表示而不是base64表示。

return BitConverter.ToString(result).Replace("-", string.Empty); 

你最终会得到:

b3b438c3b84574bb4069e0d667a18503f82fedb5