如果我们无法解码MD5哈希字符串,那么MD5的目的是什么,我们可以在哪里使用MD5。
答案 0 :(得分:9)
例如,将数据保存在数据库中。
如果您使用md5保存密码,并将其与您在表单中输入的密码进行比较并对其进行哈希处理,则密码仍然相同,但您无法在数据库中以明文形式查看密码。
例如:
password = 123
md5(123) === "202cb962ac59075b964b07152d234b70"
如果你尝试登录并输入123作为密码,它的md5仍然是相同的,你可以比较它们。但是如果您的数据库被黑客入侵,黑客就无法以明文形式读取密码,只能读取散列值
答案 1 :(得分:5)
可解密文件的属性始终至少与原始文件一样大,哈希值要小得多。
这允许我们从文件创建一个哈希,可以证明文件的完整性,而不存储它。
有许多理由不以加密或纯文本格式存储文件:
只要加密文件落入坏人手中,他们就可以尝试解密。哈希不可能发生。
您根本不需要自己的文件,但也许您将其发送给某人,并且该人可以使用哈希来证明其完整性。
答案 2 :(得分:1)
它允许您确定您拥有的数据(例如,输入的密码)是否与其他秘密数据(例如,正确的密码)相同而无需访问秘密数据。换句话说,它可用于确定“此用户输入的密码是否正确?”同时也保密密码正确。 (请注意,现在有更强大的散列方法可以代替md5用于此目的,例如sha *和bcrypt。使用现代硬件,在md5散列中每秒抛出数百万个密码相当容易找到一个与正确密码匹配的。)
它允许您通过将原始文件的md5哈希值与接收到的数据的md5哈希值进行比较来验证传输文件的完整性。如果哈希值不同,则收到的数据与发送的数据不同,因此您知道要重新发送它;如果它们相同,您可以合理地确定发送和接收的数据是相同的。
答案 3 :(得分:1)
像MD5这样的好散列函数可用于识别。见this question。在某些条件下,您可以假设等哈希表示相等的数据块。
答案 4 :(得分:1)
MD5主要用于在从1台机器发送到另一台机器时保持文件的完整性,以检测中间第三方是否有人没有修改文件内容。
基本示例是:当您从服务器服务器下载任何文件时,如果计算出MD5,则如果md5哈希匹配文件未被损坏或未被任何第三方修改,则再次检查md5值。
答案 5 :(得分:0)
MD5是一个哈希函数,还有更多像SHA,PBKDF,bcrypt和scrypt这样的哈希函数。我真的更喜欢scrypt。散列函数用于完整性原因,以便检测在传输实际消息期间可能发生的任何操作。接收方能够通过检查消息的哈希值来查找接收到的消息是否未被更改。
这些功能有三个安全属性: 1)当某人只有h(m)时,很难检测到实际的消息。 2)给定消息m及其散列函数,很难找到具有相同散列值的另一消息。 3)最后,很难找到具有相同散列值的不同消息m1,m2。
此外,重要的是要知道哈希函数的算法是公共的,并且很容易计算消息的哈希值。此外,散列是“单向”函数,这意味着很难找到给定消息散列的消息。因此,实际的安全性基于该属性。