md5哈希使用hashFunction c#

时间:2013-02-26 17:18:36

标签: c# md5

我有这段代码:

...
   private void bBrowse_Click(object sender, EventArgs e)
    {

    OpenFileDialog ofd = new OpenFileDialog();
        if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                string FileName = ofd.FileName;
                tbKeyFile.Text = FileName;
            }
        if (!String.IsNullOrEmpty(tbKeyFile.Text))
        {

            FileStream fs = new FileStream(tbKeyFile.Text, FileMode.Open);

            MD5 hashFunction = MD5.Create();
            byte[] computedHashCode = hashFunction.ComputeHash(fs);

            string HashInString = Convert.ToBase64String(computedHashCode);

            lHash.Text = HashInString;
         }

    }
...

但它不是在计算md5哈希值。它正在计算SHA1校验和。 我做错了什么?

2 个答案:

答案 0 :(得分:1)

正如CodesInChaos所说:MD5.ComputeHash()返回base64中的值。您必须自己将其转换为HEX格式(当然,如果您需要)。可以找到例如here

的示例
string HashInString = BitConverter.ToString(computedHashCode ).Replace("-", "");

提供的示例是正确的:

M1UOF9zlCe+LwCfDNcWGPw==中的

Base64等于33550e17dce509ef8bc027c335c5863f HEX。使用Base64 to Hex Converter进行检查!

答案 1 :(得分:0)

  

输入:213441dasses输出:M1UOF9zlCe + LwCfDNcWGPw ==预期输出:   33550e17dce509ef8bc027c335c5863f

您的预期输出是十六进制字符串,而实际输出则不是。您当前正在将哈希转换为基于64的字符串,这显然不是您想要的。

有关如何从散列中返回预期的十六进制字符串,请参阅this answer