首页 > 加密算法中的 salt 的用途和意义何在, 还有现在就 bcryp t比较安全吗

加密算法中的 salt 的用途和意义何在, 还有现在就 bcryp t比较安全吗

不用salt有什么缺点, bcrypt 是不是比较耗能源和速度慢


假设你的数据库已经被黑客拿到了。

比如 md5sum("123456") = "e10adc3949ba59abbe56e057f20f883e"

如果不用 salt ,直接 md5 的话,直接在你的数据库里搜索后面那个值不就能找出所有密码是"123456"的用户了吗?

要知道,黑客的目的其实并不是(或者说大多数时候不是)破解某一个人的密码,而是获取大量的用户名/密码对

好了,现在你加了盐,但盐是固定的,比如直接写死在代码里的,这样行不行呢?这样也是不行的,因为黑客仍然可以通过预先计算的方式来做。比如黑客黑了你的服务器,看到了你的代码,知道了你的盐是 xxx ,于是他计算:

md5sum("123456xxx") = "e087dae60e744ea80722b785a75adbb7"

然后再到你的数据库里搜索,又能得到大量密码是 123456 的用户了。

那该怎么办呢?

所以,不但要加盐,而且每个用户的盐还得不一样。我看到的一种做法是,直接用每个用户的用户名,或者用户名的变形来做盐。

现在也有很多 md5 反查网站,如 http://www.xmd5.com/ http://www.cmd5.com/ 不加盐的话是很容易反查的。

推荐一篇文章:用户密码薄如纸


安全,总是考虑最坏的情况,我们把所有的密码加密(比如md5)以后存放在数据库里面。

最坏的情况,黑客入侵了数据库,获得了所有的数据。为什么加入 salt?这样,即使两个用户使用了一样的密码,由于有了 salt 的存在,密码加密以后保存在数据库里面,也是不一样的。

黑客的破解方式有两种:

说白了,就是猜谜码,也就是说,黑客用一个对照表——彩虹表——来猜谜码。这时我们给他加点盐(salt),这种方法就不灵了。

bcrypt 在加密的时候已经加入了盐(salt)。

bcrypt 比较耗资源,用多了的话会导致资源上升,内存占用加大,网站变慢,最后导致全球气候变暖,南极冰川融化,海平面上升,…… 因此还是 md5+salt 才是绿色环保型的加密方式。


不用salt,被爆库了就等同于步csdn后尘。hash字典是很厉害的,解大多数用户密码不是问题。

bcrypt很慢。人多一点就是大负担。

与那个流行的英文帖子的观点相反,我认为用bcrypt过于极端,没有必要,因为:

  1. 太慢了。
  2. 被爆库了本来就不应该指望有什么安全可言。
  3. hash后的密码本来也不应该发给用户。给用户的只应该是有严格有效期的令牌(token)。
  4. 约束用户口令长度,是防止hash冲撞的不二法门。只要口令长度不足以插入足够的攻击数据,那么哪怕是md5这么软弱的方法都没什么危险。
【热门文章】
【热门文章】