md5()与.vs之间有什么不同?密码保存时哈希?

van*_*loc 4 php encryption hash

今天,我和我的朋友讨论了网站的安全性。

保存用户密码时,我通常使用带有随机盐的哈希值。

由于哈希无法反编译,我的朋友经常md5()用来加密用户密码。

问题是:

我试图向他解释,md5()可以解密,但是他接受了:

“我可以使用md5(md5(md5('password')))md5() + random string”。

所以,我也提到这将有很多时间保存到数据库中,当用户登录时,再次进行解密。

但这还不足以说服。有谁可以建议我如何轻松地理解?

谢谢。

mar*_*kli 5

MD5是一种哈希函数(一种方式),无法解密,MD5密码存储的问题有所不同。

  • MD5对于散列密码来说太快了,一个好的GPU每秒可以计算大约100 Giga MD5。这使得强行实施变得太容易了,测试整个英语词典仅需几微秒的时间。
  • 像md5(md5(md5(md5('password'))))这样组合MD5不会增加很多安全性,密码破解工具通常可以立即提供此功能。

这就是为什么我们应该使用具有诸如BCrypt之类的成本因子的哈希函数的原因。成本因素决定了用于计算单个哈希的时间,该时间应与服务器可以承受的时间一样长。PHP提供了函数password_hash()来生成安全的密码哈希。