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