哈希值是全局唯一的

时间:2010-03-24 06:23:27

标签: c# java hash

我想为文件生成哈希码。使用C#我会做这样的事情,然后将值存储在数据库中。

byte[] b = File.ReadAllBytes(@"C:\image.jpg");
string hash = ComputeHash(b);

现在,如果我使用一个实现相同哈希算法(Md5)的Java程序,我可以期望哈希值等于C#中生成的值吗?如果我从不同的环境,Windows,Linux或Mac执行java程序会怎么样?

5 个答案:

答案 0 :(得分:8)

哈希值不是全局唯一的。但这不是你真正要求的。

您真正想知道的是,散列算法(例如MD5)是否会为不同操作系统平台上的相同文件生成相同的散列值。答案就是“是”......前提是文件是逐字节相同的。

在二进制格式的情况下应该是这种情况。对于文本文件,不同字符编码之间的代码转换或更改行终止序列将使文件在字节级别上不同,从而产生不同的MD5哈希值。

答案 1 :(得分:1)

从相同输入和相同算法生成的Havh值被定义为相等。 1 + 1 = 2,无论我编程的编程语言如何。

否则互联网根本无法运作,你知道。

答案 2 :(得分:1)

我的建议是使用像MD5这样的通用/接受的散列算法来实现相同的散列值。

答案 3 :(得分:1)

如果哈希算法和输入相同,则无论语言或环境如何,生成的哈希值都是相同的。 散列算法获取密钥的全部/部分并对其进行操作以生成值,这就是为什么它在所有语言中都是相同的。

答案 4 :(得分:0)

我希望我能对此发表评论,但我没有足够的声誉来做到这一点。

虽然我不知道您想要使用哈希算法的目的,但我想说已经找到了MD5的一些冲突,所以它可能不那么“安全”(好吧,我们可能不会说“破碎”,因为这些碰撞难以计算)。同样的说法适用于SHA-1算法。

此处提供更多信息:http://www.mathstat.dal.ca/~selinger/md5collision/

因此,如果您想将哈希算法用于安全目的,那么您可以看一下目前更强大的SHA-256或SHA-512。

否则你可能继续使用MD5。

我的两分钱。