-1

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

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

4 回答 4

8
  • 我希望您的数据库列不命名为“passowrd”。

那一边..

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

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

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

这样,具有彩虹表(散列到明文映射的大字典)的攻击者就无法看到“哦,看,乔用户决定将他的密码设置为‘密码’!”。这也可以防止有人暴力破解数据库中的所有密码,因为如果每个帐户都有自己独立的盐,每个密码都必须受到独立的攻击。

于 2012-02-26T04:27:47.670 回答
1

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

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

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

于 2012-02-26T04:27:01.680 回答
0

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

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

于 2012-02-26T04:27:47.787 回答
0

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

于 2012-02-26T04:28:08.217 回答