【问题标题】:Decryption of password encrypted using PASSWORD() function of mysql解密使用mysql的PASSWORD()函数加密的密码
【发布时间】:2014-08-05 11:56:57
【问题描述】:

我正在使用 SQL 的PASSWORD()function 来加密密码。现在我正在寻找一种方法来如果有人忘记他/她的密码来获取密码。

$user = "select * from users where email='$email' and password='PASSWORD($pass)'";

谢谢

【问题讨论】:

  • 有一个替代方法,通过更新密码,但我也想要一种解密方法。
  • 如果我看到一个可以找回密码的网站,我认为开发人员不称职plaintextoffenders.com/faq/devs
  • 密码应该是ecrypted on-way/hashed。您应该永远无法检索用户的密码。
  • 您的方法可能是正确的,但从用户的角度考虑后,我认为我应该放弃解密的想法。

标签: php sql password-encryption password-recovery


【解决方案1】:

您永远不应该以可以解密的方式存储您的密码。而只是生成一个新密码。

类似:

UPDATE users SET `password` = 'PASSWORD(someSuper.Safe123Password!)' WHERE `id` = USERID

【讨论】:

  • 是的,我知道这一点,但出于某些原因,如果不想更新,作为开发人员,如果我正在加密某些东西,我也应该知道一种解密方法。
  • 我同意以可解密的方式存储密码通常是不好的做法,最好只使用安全的哈希算法,但在某些情况下,您希望以一种可以解密的方式存储数据可以再次解密(不一定是密码,而是一些其他数据),因为只是更改数据没有选项。在这种情况下,您可以使用 RSA 之类的东西 - 非常安全(由银行使用),但如果您知道私钥,那么它很容易解密 - 只是意味着您必须确保私钥安全存储(最好在完全不同的系统上)。
  • @Terwanerik 我知道这种方法,但正如我所提到的,我不想更新它。
  • 当然您可以使用 RSA 或任何其他基于密钥的加密,但我们在这里讨论的是密码。大多数人仍然只为他们的所有帐户使用几个密码,如果一个开发人员决定使用糟糕的加密,或者 - 天堂禁止 - 开发人员泄露他的密钥,所有这些帐户都处于危险之中。我什至建议您对密码进行加密和加盐,以提高安全性;没有比“网站通过安全漏洞泄露 xxxx 密码”更糟糕的宣传了
  • @Terwanerik 感谢您改变我的方法,并且知道我开始知道最好让某人的方法更好,而不是为他的坏方法提供解决方案。
【解决方案2】:

您无法直接恢复此密码,只能使用暴力破解或使用彩虹表进行此哈希。

或者如果你不想恢复它,你可以通过mysql的更新命令来改变它。

【讨论】:

    【解决方案3】:

    PASSWORD() 是一种散列方法,因此无法解密为原始字符串 http://dev.mysql.com/doc/refman/5.1/en/password-hashing.html

    所以你的问题的答案

    如果你想加密/解密你可以使用AES_ENCRYPTAES_DECRYPT方法 http://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_aes-decrypt 或者DES_ENCRYPTDES_DECRYPT

    注意:出于安全原因,存储可以解密的密码是不明智的,您最好设置一个新密码。或者在您的情况下,当用户忘记他/她的密码时,您可以生成一个随机字符串并将其用作数据库中的密码,生成的密码可以邮寄给您的最终用户。

    正如 hd 所说,您最好将生成的字符串用作最终用户的重置令牌。

    【讨论】:

    • 需要注意的是,生成的随机字符串通过电子邮件发送给用户,应该作为他们登录的“令牌”,以指导他们立即更改密码,而不是用作他们的实际密码,尤其是当您通过电子邮件发送纯文本“密码”时。
    猜你喜欢
    • 1970-01-01
    • 2011-06-30
    • 2020-11-10
    • 1970-01-01
    • 2014-12-07
    • 2020-07-04
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    相关资源
    最近更新 更多