我正在使用以下方式来加密用户的密码,即 AES 加密。我只是想知道这是一个好习惯还是我应该遵循其他任何方法。因为有人让我困惑说“你为什么不使用“SALT”。我可以使用 SALT AES 加密吗?与 Bellow 是我正在使用的示例查询。
INSERT INTO user(id,passowrd) VALUES (1,AES_ENCRYPT('mypassword','key'));
我正在使用以下方式来加密用户的密码,即 AES 加密。我只是想知道这是一个好习惯还是我应该遵循其他任何方法。因为有人让我困惑说“你为什么不使用“SALT”。我可以使用 SALT AES 加密吗?与 Bellow 是我正在使用的示例查询。
INSERT INTO user(id,passowrd) VALUES (1,AES_ENCRYPT('mypassword','key'));
那一边..
Salt 不是一种加密方法,它是一个随机位,您需要在散列之前添加到每个密码中以防止字典攻击。
您不应该使用可逆的 AES 加密来存储用户密码。您不关心用户的密码是什么,只要他们知道:所以不要以可逆的形式存储密码。
相反,您使用密码和一些随机数据的安全单向哈希,例如 SHA256 甚至 bcrypt 。这个随机垃圾,即“盐”,是为每个用户生成的,并在散列之前附加到密码中。然后将其与散列数据一起存储在数据库中,以便您稍后比较密码。
这样,具有彩虹表(散列到明文映射的大字典)的攻击者就无法看到“哦,看,乔用户决定将他的密码设置为‘密码’!”。这也可以防止有人暴力破解数据库中的所有密码,因为如果每个帐户都有自己独立的盐,每个密码都必须受到独立的攻击。
盐是添加到即将被散列的字符串的字符序列,因此攻击者更难获得原始字符串。
但是,对于不基于散列的密码算法,盐不是必需的,因为攻击者无论如何都会获得带有盐的原始字符串,并且只需要删除它的逻辑。
使用 AES_ENCRYPT,您使用的密钥是盐。我更喜欢像 MD5 或 SHA 这样的单向哈希,但许多人喜欢像您存储的可解密密码。