创build一个bcrypt哈希后,存储在MySQL中用AESencryption的密码

我正在构build一个应用程序,并将用户密码存储在MySQL中的表中。 我已经在使用bcrypt但是想知道,在将数据存储到数据库之前,是否已经对AES_ENCRYT()进行了散列密码?

 Example: $bcrypt = new Bcrypt(); $hash = $bcrypt->hash('some-password-here'); 

我应该将$ hash存储为varchar(60)还是调用MySQL AES_ENCRYPT('crypto_key', $hash)并将其存储在blob列中?

不,一个合理的工作因素的密码散列密码应该是足够安全的。

不得不不同意以前的答案:它确实有道理,但不完全。

这里的AESencryption会为密码安全性添加一个额外的层,即基于未存储在数据库中的信息(我假设您不会将AES密钥与密码放在同一个数据库中)。 有几种情况下密码数据库可能会受到攻击而无法访问应用程序configuration。 (SQL注入,不同服务器上的数据库,对数据库备份的访问等)

即使使用bcrypt的用户特定的salt,弱密码仍然相对容易破解。 任何密码数据库中都会有很多弱密码。

这一点没有道理:为什么对称encryption,当你只是可以在运行BCrypt之前将密钥附加到密码? 所以,相同的安全级别通过以下方式获得:

 $hash = $bcrypt->hash('some-password-here' . 'crypto_key'); 

阅读更多: http : //blog.mozilla.org/webappsec/2011/05/10/sha-512-w-per-user-salts-is-not-enough/