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

标签 php encryption hash

今天,我和我的 friend 讨论了一个网站的安全问题。

在保存用户密码时,我通常使用带有随机盐的散列。

由于hash无法反编译,我 friend 经常使用md5()来加密用户密码。

问题是:

我试着跟他解释,md5()可以解密,但是他拿了:

" I can using md5(md5(md5('password'))) or md5() + random string ".

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

但这还不足以让人信服。有没有人可以建议我如何解释容易理解?

谢谢。

最佳答案

MD5 是一个散列函数(单向),无法解密,MD5 用于密码存储的问题是不同的。

  • MD5 对于散列密码来说太快了,一个好的 GPU 每秒可以计算大约 100 Giga MD5。这使得暴力破解变得太容易了,测试整个英语词典只是几微秒的事情。
  • 像 md5(md5(md5('password'))) 这样组合 MD5 不会增加太多安全性,密码破解工具通常提供开箱即用的功能。

这就是为什么我们应该使用像 BCrypt 这样具有成本因子的哈希函数。成本因素决定了计算单个哈希所用的时间,应该在你的服务器能够承受的范围内。 PHP 提供函数 password_hash()生成安全的密码哈希值。

关于php - md5() .vs. 之间有什么不同?保存密码时的哈希值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39612656/

相关文章:

php - Laravel 数据库不同字段之间的唯一键

encryption - 如何加密矢量切片 JSON 响应

C# MD5 哈希需要匹配 PHP MD5 哈希(带盐)

php - 编辑加载后的 WordPress 操作

php - xcode mysql php错误

iPhone AppStore 加密导出以供 openssl 使用 - 如何?

c++ - 我的 RSA 加密每次生成 2^64 (C++)

java - 检索线性/二次散列的探针长度

php - object.hashCode使用哪种哈希方法?

php - 带 Bootstrap 日期选择器的 Laravel 4