【问题标题】:How to decode the password: $password = md5( addslashes( $_POST['password'] ) );如何解码密码:$password = md5(addslashes($_POST['password']));
【发布时间】:2015-06-29 03:16:08
【问题描述】:

作为标题,请告诉我如何解码由此编码的密码字符串:

$password = md5(addlashes($_POST['password']));

例如:f21601fea7f496cfbc23f7310e13f941

谢谢!

【问题讨论】:

  • 可以逆转,但没那么容易……
  • @KrzysztofTrzos 多个密码可以生成相同的 MD5 哈希,因此它技术上无法反转 - 有无数个字符串可以匹配任何一个MD5 哈希。
  • “如何解码密码:” - 不要 - 称其为因祸得福,因为它不起作用。在这里,ircmaxell 之前发布了一个答案,使用了更安全的哈希方法stackoverflow.com/a/29778421

标签: php cryptography passwords md5


【解决方案1】:

MD5 是单向的hashing algorithm。这种算法的本质是无法逆转。它可以,它是一种加密算法,而不是散列。

在切换到加密算法之前,不要。如果可能,密码应始终存储为散列(存在不寻常的情况,例如您为第三方系统存储密码的位置)。如果您的代码/数据库遭到入侵,这可以保护您的用户。

对于简单的字符串,可以在“彩虹表”中查找 MD5 哈希。例如,098f6bcd4621d373cade4e832627b4f6 可以放入像http://md5cracker.org/ 这样的工具中,以找出密码可能 test(但它可能是另一个导致相同哈希的字符串,称为a collision)。

注意: MD5 也是insecure,因为您可以快速生成彩虹表。在对密码进行哈希处理时,您应该使用 PHP 内置的 password_hash / password_verify 函数,因为它们利用了安全的 bcrypt 哈希算法。

【讨论】:

  • 实际上我还添加了一个字段(在注册表单中),它将以纯文本形式存储用户密码,但是当我在数据库中搜索该文本时,它不起作用。 $password = md5( addslashes( $_POST['password'] ) ); $pwd = addslashes( $_POST['pwd'] ) ;
  • @ChristopherMcKenny 不要那样做。此外,停止使用 addslashes 的东西。它在您的代码中是不必要的(MD5 哈希永远不会有 " 字符),也不足以防止 SQL 注入。
  • 您还需要在散列之前salt您的密码。 password_hashpassword_verify 为您处理所有这些。
猜你喜欢
  • 2011-08-11
  • 2017-11-02
  • 1970-01-01
  • 2021-05-12
  • 2023-03-29
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多