我有时会看到并建议将字符串和关联数组键存储为MD5哈希值。现在我已经了解了麻省理工学院的哈希 - OCW 6.046j,它似乎更像是一种以高效格式存储数据的方案,用于快速搜索并防止人们取回原始数据。 但是支持关联数组/字典的语言不能在内部执行此操作吗? MD5哈希给出了什么额外的优势?
答案 0 :(得分:0)
大多数语言可能会在内部支持此功能,例如,请参阅Java hashcode(),这是在HashMap中存储密钥时使用的:
返回对象的哈希码值。支持此方法是为了哈希表的优势,例如HashMap提供的哈希表。
但有些情况下你想自己动手。
假设您有一个很大的no-sql
- ish数据库,这些字母和这些字母的元数据。您希望能够快速找到字母的元数据而无需搜索。你的指数是什么?
一个选项是使用与字母内容无关的运行索引,但是您必须先搜索数据库,然后才能找到文档的元数据。另一种选择是为由其前缀组成的文档创建签名(它只是众多中的一个例子),但有些文档可能共享此属性("亲爱的John,&#34 ;)
那么如何考虑整个文件呢?您可以在其中使用md5作为文档的行键。
在这种情况下,你依赖于no collisions,赞成这个假设的论据通常会提到你遇到一个疯狂的大猩猩(通常)更大的机会。安全散列算法系列产生更少的冲突。
我提到这一点,因为数据库通常不会开箱即用(框架可能......)。
注意:这可能不再适用于md5,但它适用于SHA
-family变体。
在这种情况下,您希望在数据库中存储密码,但如果数据库遭到入侵(用户经常在站点之间共享密码,则可能导致其他站点上的帐户受到攻击),存储纯文本密码可能会有缺点。这里使用哈希来存储哈希密码,当用户尝试登录时,只比较哈希而不是密码本身。这样你就不需要在本地存储密码,而且要破解密码要困难得多。