什么是加盐密码?

   生活中,我们为了保证密码的安全性,一般都不会使用明文存储,而是要将明文进行加密,然后再进行存储。假如我们的数据被拖库,代码被泄露,请求被劫持的情况下,也能保证用户的密码不被泄露,确保账号的安全性。

MD5

MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计。
MD5这种不可逆的加密方法理论上很安全了,但是随着彩虹表的出现,使得大量长度不够长的密码可以直接从彩虹表里反推来。MD5算法无法防止碰撞(collision),也意味着它并不安全。

md5(md5(password) + salt)

为了改进MD5加密,机智的程序员就想,既然你可以反推出我的密码,那么只要我在我的短密码上加上一段很长的字符,再计算md5,这样你反推出原始密码就会变得非常困难。这段长字符就是我们所称的盐(Salt),通过这种方式加密的结果,我们称为加盐Hash

SHA512(SHA512(password)+salt)

在我们常用的哈希函数中,SHA-256、SHA-512会比md5更安全,更难以破解。通过上面的加盐哈希运算,即使攻击者拿到了最终结果,也很难反推出原始的密码。不能反推,但可以正着推,假设攻击者将 salt 值也拿到了,那么他可以枚举遍历所有 6 位数的简单密码,加盐哈希,计算出一个结果对照表,从而破解出简单的密码。这就是通常所说的暴力破解。

bcrypt(SHA512(password),salt,cost)

为了应对暴力破解,我们使用了加盐的慢哈希。慢哈希是指执行这个哈希函数非常慢,这样暴力破解需要枚举遍历所有可能结果时,就需要花上非常非常长的时间。既然无法阻止你暴力破解,那就控制你的时间。
通过调整 cost 参数,可以调整该函数慢到什么程度。假设让 bcrypt 计算一次需要 0.5 秒,遍历 6 位的简单密码,需要的时间为:((26 * 2 + 10)^6) / 2 秒,约 900 年。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值