1

情况

我在我的 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(),但我得到像“!?......”这样的符号我想最终避免使用“==”。我应该怎么办 ?改变编码器?
4

2 回答 2

2

==是 base 64填充结果的结果。如果您愿意,可以剥离它们。

于 2011-03-02T20:33:20.667 回答
0

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

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

你最终会得到:

b3b438c3b84574bb4069e0d667a18503f82fedb5
于 2014-06-10T21:38:27.333 回答