哈希值是否全局唯一

问题描述 投票:0回答:5

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

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

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

c# java hash
5个回答
8
投票

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

你真正想知道的是一个散列算法(比如MD5)是否会在不同的操作系统平台上为相同的文件产生相同的散列值。 that 问题的答案是“是”......前提是文件逐字节相同。

对于二进制文件,它们应该逐字节相同。在文本文档的情况下,不同字符编码之间的转码,或者改变行终止序列都会使文件在字节级别上不同,从而导致不同的 MD5 哈希值。


1
投票

从相同输入和相同算法生成的 Havh 值被定义为相等。 1+1=2,不管我用什么编程语言来编程。

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


1
投票

我的建议是使用像 MD5 这样的通用/可接受的哈希算法来获得相同的哈希值。


1
投票

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


0
投票

我希望我可以对此发表评论,但我没有足够的声誉来这样做。

虽然我不知道你想要使用哈希算法的目的是什么,但我想说的是,已经发现了 MD5 的一些冲突,所以它可能不太“安全”(好吧,我们可能不能说“ broken”,因为这些碰撞很难计算)。同样的评论适用于 SHA-1 算法。

更多信息在这里:http://www.mathstat.dal.ca/~selinger/md5collision/

因此,如果出于安全目的,你想使用哈希算法,你可以看看目前更强大的 SHA-256 或 SHA-512。

否则你可以继续使用 MD5。

我的两分钱。

© www.soinside.com 2019 - 2024. All rights reserved.