Hash MD5哈希背后的原因?

Hash MD5哈希背后的原因?,hash,md5,Hash,Md5,我有时看到并被建议将字符串和关联数组键存储为MD5哈希值。现在我从MIT-OCW6.046j学到了散列,它更像是一种以高效格式存储数据的方案,用于快速搜索,并防止人们取回原始数据。 但是支持关联数组/字典的语言在内部不这样做吗?MD5散列提供了什么额外的优势?大多数语言可能在内部支持这一点,例如,请参阅Java的,它用于将密钥存储在: 返回对象的哈希代码值。支持此方法是为了使用哈希表,例如HashMap提供的哈希表 但有些情况下,你想自己做 场景1-在数据库中用作密钥: 假设您有一个大型的no-

我有时看到并被建议将字符串和关联数组键存储为MD5哈希值。现在我从MIT-OCW6.046j学到了散列,它更像是一种以高效格式存储数据的方案,用于快速搜索,并防止人们取回原始数据。
但是支持关联数组/字典的语言在内部不这样做吗?MD5散列提供了什么额外的优势?

大多数语言可能在内部支持这一点,例如,请参阅Java的,它用于将密钥存储在:

返回对象的哈希代码值。支持此方法是为了使用哈希表,例如HashMap提供的哈希表

但有些情况下,你想自己做

场景1-在数据库中用作密钥: 假设您有一个大型的
no-sql
-ish字母数据库和这些字母的元数据。您希望能够在不进行搜索的情况下快速找到信件的元数据。你的指数是多少

一种选择是使用与信件内容无关的运行索引,但在找到文档元数据之前,必须搜索数据库。另一种选择是为由其前缀组成的文档创建签名(这只是许多文档中的一个示例),但有些文档可能共享此属性(“亲爱的John”)

那么,把整个文件都考虑进去怎么样?在这里,您可以使用md5作为文档的行键

在这种情况下,你所依赖的是拥有,而支持这一假设的论点通常会提到,你(通常)遇到精神错乱的大猩猩的几率更大。安全哈希算法家族产生的冲突更少

我之所以提到这一点,是因为数据库通常不会开箱即用(frameworksmay…)

场景2-用于密码存储的单向散列: 注意:这可能不再适用于md5,但适用于变体


在这种情况下,您希望将密码存储在数据库中,但如果数据库受损,则存储纯文本密码可能会有缺点(用户经常跨站点共享密码-可能会导致其他站点上的帐户受损)。这里使用散列存储散列密码,当用户尝试登录时,只比较散列而不是密码本身。这样,您就不需要将密码存储在本地,而且破解密码要困难得多。

是的,但是关联数组呢?在将密钥添加到数组之前,是否需要散列密钥?让我们以PHP为例,它通常在您提到的场景中自动完成。