我有这段代码:
...
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校验和。 我做错了什么?
答案 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。