【发布时间】:2012-05-29 11:48:45
【问题描述】:
在我们的应用程序中,我们将收到 png 图像以及大约 200 个字符字节的数组。我想用与该字节数组对应的文件名保存图像,但不是字节数组本身,因为我不想要 200 个字符的文件名。所以,我想我会将字节数组保存到数据库中,然后 MD5 得到一个短文件名。当需要显示特定图像时,我查找它的字节数组,MD5,然后查找该文件。
到目前为止一切顺利。问题是两个不同的字节数组可能会散列到相同的 MD5。然后,一个文件将有效地覆盖另一个文件。或者他们可以吗?我想我的问题是
- 能否将两个约 200 个字符的字节数组 MD5 散列到同一个字符串?
- 如果可以的话,这是每 10 个宇宙时代一次的交易还是可以想象在我的应用中发生的事情?
- 是否有一种哈希算法可以生成一个(比如说)32 个字符的字符串,并且保证是唯一的?
【问题讨论】:
-
我不明白需要通过一些任意计算来自动确定文件名。只需创建一些密钥...文件名或其他任何内容,并将其存储在 200 字符字节数组旁边,并将其用作您的文件名。将计算从混合中剔除,并使底层代码更简单......
-
请按常规大写。
-
jsobo - 我想使用散列(或类似)函数的原因是,在很多情况下,源字节数组(和 png)对于不同的用户来说是相同的,所以我可以避免保存在该实例中相同 png 的多个版本。即,如果 100 个人都有相同的字节数组(由于相同的选项集),那么他们都共享相同的 png 文件。