我正在研究这个PHP项目,我有很多地方正在使用md5。我甚至多次使用它,但是今天我还不清楚它的功能是什么。我意识到它会解密传入的值但是如何撤消它以使其恢复原状。也许我不清楚整个过程,如果有人有关于这个过程的信息,我会非常感激
答案 0 :(得分:7)
md5是一个散列函数
哈希函数是任何明确定义的 程序或数学函数 转换大,可能 可变大小的数据量 小数据。 a返回的值 哈希函数称为哈希值, 哈希码,哈希值,校验和或 只是哈希。
答案 1 :(得分:4)
MD5 is a one way encryption hash。
它不会解密任何内容,而是会创建一个哈希码,您可以使用该哈希码与其他MD5哈希值进行比较。过去,如果两个哈希相匹配,您可以确信这两个输入是相同的。最终发现了几次碰撞,然后是故意造成碰撞的方法(出于安全目的降低了MD5的价值)。这是一个相当快速的算法,因此仍然可以使用它(在传输大量数据时检查损坏,以及其他可能提供其他形式的保护以防止真正攻击的地方)。 p>
答案 2 :(得分:2)
MD5本身不是加密,而是用于生成校验和的算法。无论传入什么数据,您都会得到一个固定长度的十六进制(只有0-9和A-F)字符串。这个想法是,除了传入的数据之外的任何其他数据都不太可能产生相同的MD5字符串。由于结果具有固定的长度,而您的数据可以是任何长度,显然 其他数据导致相同的MD5字符串,但再一次,您不太可能找到它。< / p>
因此,没有办法实际“解密”MD5字符串。你做的是,你从一些数据生成它,然后从一些其他数据生成它,并比较两个MD5字符串。如果它们相同,您可以非常肯定(尽管不是100%),两个输入数据是相同的。
答案 3 :(得分:1)
MD5不解密任何东西。它被认为是单向散列算法。对于给定的输入,它返回固定长度的字符串。另外,对于两个非常相似但不相同的给定输入,返回的md5值将是不可预测的。
哈希对许多事情都有好处,例如文件验证。虽然偏离主题,如果你拿了一个文件并为它计算了一个哈希,然后向某人发送了一个文件和一个哈希,他们可以很容易地通过自己哈希来验证他们收到文件是正确的,然后断言他们的哈希匹配提供的哈希。
另一个例子是网站上的身份验证。在对用户进行身份验证之后,您启动会话并在该会话中存储md5(用户名+时间)并在用户浏览器上存储cookie(md5(用户名+时间))然后在后续页面请求中检查您的会话哈希是否与用于断言用户的cookie哈希就是他们所说的用户。对于这种类型的东西,Md5不是一个很好的哈希,但哈希一般可以在这些情况下提供帮助。对于这个应用程序甚至sha512,sha1将是一个更好的散列函数。
答案 4 :(得分:1)
MD5是加密哈希函数。加密哈希函数具有特殊属性,它们根据输入生成结果,但几乎不可能恢复原始输入。这有点像“单向加密”。此外,通过加密哈希函数传递相同的数据,您应该总是得到相同的结果。
虽然它们不是加密的首选,但它只是单向的,但它们在存储密码时非常有用。这是因为,正如我所说,相同的输入总是会有相同的结果。这使得密码以纯文本形式存储,甚至不需要可恢复的版本(例如加密密码)。相反,您只需从密码生成哈希并将其存储在数据库中。每当有人尝试登录时,您都会从数据库中检索哈希值,然后根据用户输入的密码生成一个新的哈希值并比较两者。
请注意MD5不是很安全,您应该尝试使用其他更安全的散列函数,例如SHA512:
<?php
$hash = hash('sha512', $data);
?>
有用的链接:
答案 5 :(得分:0)
请参阅http://en.wikipedia.org/wiki/Hash_function。
哈希函数的强度取决于其反转的难度。
答案 6 :(得分:0)