2

我目前正在使用 MD5 和 SHA1 将我的用户密码保存在数据库中,但我不知道如何以纯文本形式取回它们。我试图回滚用于加密密码的相同代码,但它给了我一个错误。

我用来加密密码的代码:

   $hashedpassword = md5(md5(sha1(sha1(md5($normalpassword)))));

我试着像这样做同样的事情

   $normalpassword = md5(md5(sha1(sha1(md5($hashedpassword)))));

然后我意识到这很有趣:(!!请帮帮我......

4

4 回答 4

17

MD5 和 SHA-1 是单向哈希函数,这意味着您无法从哈希值中取回原始字符串。

于 2012-08-29T08:54:05.030 回答
4

你不能。散列是一种方法,您必须在登录表单中生成输入的新散列并检查它是否等于存储的散列。

于 2012-08-29T08:55:05.707 回答
4

散列不是加密。

像 MD5 和 SHA1 这样的散列函数是无法反转的,它只能被验证。这通常是使用散列函数的重点,因为攻击者无法使用散列检索明文密码(其他攻击,例如使用彩虹表是可能的)。

更多细节可以在这里找到:http ://en.wikipedia.org/wiki/Cryptographic_hash_function

如果您想将散列密码存储在数据库中,请查看PHPass。它是一个很好的 php 类,可以尽可能好地散列和验证密码,并广泛用于现代基于 php 的 Web 应用程序。

于 2012-08-29T08:56:24.593 回答
2

如果你最终想要它们回来,你为什么还要加密它们?使用散列正是因为无法以明文形式取回密码。

如果您想要它们回来,请使用对称密码。

于 2012-08-29T08:55:22.050 回答