【问题标题】:PHP MySQL User Password EncryptionPHP MySQL用户密码加密
【发布时间】:2012-02-26 04:23:03
【问题描述】:

我正在使用以下方式来加密用户的密码,即 AES 加密。我只是想知道这是一个好习惯还是我应该遵循其他任何方法。因为有人让我感到困惑,说“你为什么不使用“SALT”。我可以使用 SALT AES 加密吗?与 Bellow 是我正在使用的示例查询。

INSERT INTO user(id,passowrd) VALUES (1,AES_ENCRYPT('mypassword','key'));

【问题讨论】:

    标签: php mysql password-encryption


    【解决方案1】:
    • 我希望您的数据库列没有命名为“passowrd”。

    除此之外..

    Salt 不是一种加密方法,它是您需要在 散列 之前添加到每个密码的随机位,以防止 字典攻击

    您应该使用可逆的 AES 加密存储用户密码。您不关心用户的密码是什么,只要他们知道:所以不要以可逆的形式存储密码。

    相反,您使用密码和一些随机数据的安全单向散列,例如 SHA256 甚至 bcrypt。这个随机垃圾,即“盐”,是为每个用户生成的,并在散列之前附加到密码中。然后将其与散列数据一起存储在数据库中,以便您以后比较密码。

    这样,一个拥有所谓的彩虹表(散列到明文映射的大字典)的攻击者无法出现并看到“哦,看,Joe User 决定让他的密码‘密码’!”。这也可以防止有人暴力破解您数据库中的所有密码,因为如果每个帐户都有自己独立的 salt,那么每个密码都必须受到独立的攻击。

    【讨论】:

    • +1 几乎在所有情况下都应使用加盐单向哈希。任何可逆加密都可能导致错误的人访问密码(即使只是您自己的员工,例如有权访问加密/解密算法的人)。鉴于大多数用户(不幸)有重复使用密码的倾向,这会带来很大的风险。
    • 感谢 Borealid 的回答。
    【解决方案2】:

    您不会将“SALT”与 AES 一起使用,通常它与 SHA 一起使用。

    详细信息和解释可以在以下位置找到:

    https://stackoverflow.com/a/4351749/1232478

    【讨论】:

      【解决方案3】:

      盐是添加到即将被散列的字符串的一系列字符,因此攻击者更难获得原始字符串。

      但是,对于不基于散列的密码算法,盐不是必需的,因为攻击者无论如何都会获得带有盐的原始字符串,并且只需要删除它的逻辑。

      【讨论】:

      • 顺便说一句,正如 Borealid 所建议的,您为什么不使用哈希来代替?对于您以后不需要恢复但只需比较的字符串(例如密码),它比加密更安全。
      【解决方案4】:

      使用 AES_ENCRYPT,您使用的密钥就是盐。我更喜欢像 MD5 或 SHA 这样的单向哈希,但很多人喜欢像您存储的那样可解密的密码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-23
        • 1970-01-01
        • 2012-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-07
        • 2013-11-03
        相关资源
        最近更新 更多