PHP md5解释道

时间:2010-08-17 17:48:36

标签: php md5

我正在研究这个PHP项目,我有很多地方正在使用md5。我甚至多次使用它,但是今天我还不清楚它的功能是什么。我意识到它会解密传入的值但是如何撤消它以使其恢复原状。也许我不清楚整个过程,如果有人有关于这个过程的信息,我会非常感激

7 个答案:

答案 0 :(得分:7)

md5是一个散列函数

It only works one way.

  

哈希函数是任何明确定义的   程序或数学函数   转换大,可能   可变大小的数据量   小数据。 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)

使用md5算法

生成输入数据的单向散列

一些链接:

http://en.wikipedia.org/wiki/MD5

http://en.wikipedia.org/wiki/Cryptographic_hash_function