Hash 每次使用C时,相同未更改文件的MD5文件哈希都不同#

Hash 每次使用C时,相同未更改文件的MD5文件哈希都不同#,hash,md5,Hash,Md5,大家晚上好 我一直在用C#开发一个MD5工具,它获取一个文件,遍历我的Hasher类,将结果连同文件名和目录一起弹出到数据库中 我遇到的问题是,每次运行测试时,相同文件的MD5结果(即以任何方式保持不变)都是完全不同的 下面是我使用的代码 HashAlgorithm hmacMd5 = new HMACMD5(); byte[] hash; try { using (Stream fileStream = new FileStream(fileLocation, FileMode.Op

大家晚上好

我一直在用C#开发一个MD5工具,它获取一个文件,遍历我的Hasher类,将结果连同文件名和目录一起弹出到数据库中

我遇到的问题是,每次运行测试时,相同文件的MD5结果(即以任何方式保持不变)都是完全不同的

下面是我使用的代码

HashAlgorithm hmacMd5 = new HMACMD5(); 
byte[] hash;
try
{
    using (Stream fileStream = new FileStream(fileLocation, FileMode.Open))
    {
        using (Stream bufferedStream = new BufferedStream(fileStream, 5600000))
        {
            hash = hmacMd5.ComputeHash(bufferedStream);
            foreach (byte x in hash)
            {
                md5Result += x;
            }
        }
    }
}
catch (UnauthorizedAccessException uae) { }

return md5Result;
以下是hello.mp2的3次单独运行的结果:

14015716161105254810297623915056204169177

1672436621561047521182302116921793421

56154777074212779619017828183239971

相当令人费解。 关于为什么我会得到这些结果,我唯一理性的想法是将字节连接到字符串

有人能在这里发现问题吗

问候,


Ric

中间不应该有缓冲流。我猜在每次运行中缓冲的字节数是不同的。

您应该使用

不计算散列,而是计算消息身份验证代码

HMACMD5是一种键控哈希类型 由 MD5哈希函数,并用作 基于散列的消息验证代码 (HMAC)。HMAC过程混合了 带有消息数据的密钥, 使用哈希值对结果进行哈希 函数,将该散列值与 再次输入密钥,然后应用 第二次使用散列函数。这个 输出哈希的长度为128位


由于您没有提供HMAC密钥,因此会代表您随机生成一个HMAC密钥,并导致您看到不同的结果。

我的建议是,您没有计算MD5哈希,因为MD5生成32个十六进制数的固定长度输出

而且,由于您没有看到从0xA到0xF的任何数字,这是相当令人费解的

你可能想用它来检查一个“真实”的结果