0

我有这个代码:

...
   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 校验和。我做错了什么?

4

2 回答 2

1

正如CodesInChaos所说:MD5.ComputeHash()返回 base64 中的值。您必须自己将其转换为 HEX 格式(当然,如果您愿意的话)。例如,可以在此处找到如何实现它的示例:

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

提供的示例是正确的:

M1UOF9zlCe+LwCfDNcWGPw==inBase64等于33550e17dce509ef8bc027c335c5863f十六进制。使用Base64 to Hex Converter进行检查!

于 2013-02-26T17:32:45.123 回答
0

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

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

请参阅此答案以了解如何从哈希中返回您预期的十六进制字符串。

于 2013-02-26T17:32:44.333 回答