我需要知道是否存在任何形式从gif图像中获取唯一的哈希值,我确实尝试过使用SHA1文件函数
sha1_file
但我不知道是否存在不同gif图像的两个哈希导致相同哈希的情况。 它可能发生在SHA1?在这种情况下更好的是SHA2还是MD5?或者以前用PHP语言实现的任何其他内容。
我知道它也取决于文件大小,但gifs图像在任何情况下都不会超过10mb。
我需要有关此问题的建议。最好的问候。
答案 0 :(得分:1)
没有散列函数为您提供的每一组图像创建不同的值。这应该是显而易见的,因为您的哈希值比文件本身短得多,因此它们必然会丢弃一些信息。给定固定的图像集,生成完美的哈希函数(例如通过编号)相当简单,但这可能不是您正在寻找的答案。
另一方面,您可以使用“完美散列”,这是一种两步散列算法,可以使用两步散列算法保证分摊的O(1)访问,但是当您要求一个独特的'hash'可能也不是你想要的。您能否更具体地说明为什么您坚持哈希值是唯一的以及在什么情况下?
答案 1 :(得分:0)
sha1_file
没问题。
理论上你可以遇到两个散列到相同值的文件,但实际上它是不可能的,你不应该担心它。
答案 2 :(得分:0)
散列函数不提供有关唯一性的任何保证。 Patru如果你想阅读的话,很好地解释了原因 - 这是pigeonhole principle。
但是,我想谈谈另一个方面。虽然您不会获得任何理论上的保证,但您将获得实际保证。考虑一下:SHA-256生成256位长的哈希值。这意味着它可以生成2个 256 可能的哈希值。进一步假设它生成的哈希几乎是随机分布的(对SHA-256来说是真的)。这意味着如果你每天24小时产生十亿个哈希值,那么你每年将产生31,536,000,000,000,000个哈希值。很多,对吗?除以2 256 。那是~10 60 。如果你线性地走过所有可能的哈希值,那就是多少年它会产生所有可能的哈希值(包括午餐)。将它除以2,即......仍然~10 60 。那就是多少年你必须工作才有超过50%的机会两次生成相同的哈希值。
换句话说,如果你在一个世纪内每秒产生十亿个哈希值,那么你有两倍的生成相同哈希值的1/10 58 。在太阳燃烧之前,1/10 50 。
那些很好的机会。