今天,我和我的朋友讨论了网站的安全问题。
在保存用户密码时,我通常使用带随机盐的哈希值。
因为哈希不能反编译,我的朋友经常使用md5()
来加密用户的密码。
问题是:
我试图向他解释,md5()可以解密,但他接受了:
所以,我也提到这个将有很多时间保存到数据库中,当用户登录时,再次进行解密。"我可以使用
md5(md5(md5('password')))
或md5() + random string
"。
但它还不足以说服。有没有人可以建议我如何轻松解释?
感谢。
答案 0 :(得分:5)
MD5是哈希函数(单向),无法解密,MD5密码存储的问题也不同。
这就是为什么我们应该使用像BCrypt这样的成本因子的哈希函数。成本因素决定了用于计算单个哈希的时间,它应该与服务器可以承受的时间一样多。 PHP提供函数password_hash()来生成安全的密码哈希值。
答案 1 :(得分:0)
MD5和SHA是哈希函数(SHA实际上是一系列哈希函数) - 它们获取一段数据,压缩它并创建一个非常难以用不同数据模拟的适当唯一输出。他们不会加密任何东西 - 你不能采用MD5或SHA输出和" unhash"它回到你的起点。两者之间的区别在于它们用于创建哈希的算法。另请注意,MD5现在已被破坏,因为发现了一种容易产生冲突的方法,不再使用或不再信任它。
RSA是一种不对称的加密算法。您有两个密钥(私有和公共),您可以使用一个密钥(加密或解密)执行功能,并使用另一个密钥执行反向操作。您使用的密钥取决于您是尝试进行数字签名还是加密。