如何确保使用php和mySql对存储的密码进行了良好的加密?

如何确保使用php和mySql对存储的密码进行了良好的加密?,php,mysql,security,encryption,passwords,Php,Mysql,Security,Encryption,Passwords,注:我是一名学生,我需要在我自己的项目这一点 我在这里看到了一种 我的问题是:我是否应该将加密密码存储到数据库中,并在有人登录并检查他们是否相似时解密 另外,我是否应该在数据库上使用其他安全层来确保数据的安全?一些MySql自加密或者类似的东西 我需要一个基本的加密可以做到这一点。我知道这方面有几个线程,但我的问题是如何做到这一点,以及保护数据库中的数据(触发器、函数等)是否有用。不要保存加密密码,而是存储哈希版本 使用诸如PBKDF2(基于密码的密钥派生函数)之类的算法,使用随机salt和相当

注:我是一名学生,我需要在我自己的项目这一点

我在这里看到了一种

我的问题是:我是否应该将加密密码存储到数据库中,并在有人登录并检查他们是否相似时解密

另外,我是否应该在数据库上使用其他安全层来确保数据的安全?一些MySql自加密或者类似的东西


我需要一个基本的加密可以做到这一点。我知道这方面有几个线程,但我的问题是如何做到这一点,以及保护数据库中的数据(触发器、函数等)是否有用。

不要保存加密密码,而是存储哈希版本

使用诸如PBKDF2(基于密码的密钥派生函数)之类的算法,使用随机salt和相当大的迭代计数来降低散列速度。然后,当您想要检查密码时,通过相同的哈希函数运行密码,并验证结果是否与保存的哈希匹配


注意:保存salt和迭代计数以及结果哈希,所有这些都不需要保密。

查看并使用内置的。@JonStirling谢谢!我来看看。永远不要解密密码。。。。这意味着它们只和你的解密密钥一样安全。。。始终哈希密码,并在用户登录时比较哈希值。。。。。PHP内置了密码\u hash()/password\u verify(),正是为了实现这一目的。如果您确实需要加密密码,则可以使用AES(高级加密标准)进行复制。但这只是将问题转移到保护加密/解密密钥。如果发现该密钥,并且对所有密码使用相同的密钥,则所有密码都将被泄露。这就是我们不再保存加密密码的原因。如果没有保存密码,任何人(读政府)都不能要求提供密码。或者只需使用
密码\u散列()
密码\u验证()
。当然,我说过,比如PBKDF2。IMO PBKDF2的优点是它是一个跨平台、跨语言的行业标准,NIST推荐。并不是说密码_hash使用的bcrypt有什么问题。从专业角度来说,我对NIST的加密建议持保留态度。但是scrypt在内部使用PBKDF2,所以有这样一种情况:)