首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多次使用bcrypt和hashing有什么区别?

多次使用bcrypt和hashing有什么区别?
EN

Stack Overflow用户
提问于 2011-08-16 08:52:40
回答 5查看 5.2K关注 0票数 14

比方说,bcrypt怎么会比

代码语言:javascript
复制
def md5lots(password, salt, rounds):
    if (rounds < 1)
        return password
    else
        newpass = md5(password + salt)
        return md5lots(newpass, salt, rounds-1)

我有一种感觉,鉴于它的炒作,比我更聪明的人已经发现bcrypt比这更好。有人能用“聪明的门外汉”来解释其中的区别吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-08-19 09:02:24

在MD5中,多次使用bcrypt和with有三个显著的区别:

  1. 输出的大小:128位(16字节)用于MD5,448位(56字节)用于bcrypt。如果你在一个数据库中存储了数以百万计的散列,那么这些散列就必须被放入account.
  2. Collisions中,这样就有可能对MD5进行前映像攻击。
  3. Bcrypt可以配置为随着cpu的功能变得越来越强大而迭代越来越多。

因此,在MD5中使用加盐和拉伸并不像使用bcrypt那样安全。这个问题可以通过选择比MD5更好的散列函数来解决。

例如,如果选择SHA-256,则输出大小为256位(32字节)。如果盐化和拉伸可以配置为像bcrypt一样增加迭代次数,那么两种方法之间没有区别,除了存储结果散列所需的空间量。

票数 3
EN

Stack Overflow用户

发布于 2011-08-22 19:31:48

主要的差分- MD5和其他用于验证数据的散列函数被设计成快速的,而bcrypt()被设计成很慢。

当您验证数据时,您需要速度,因为您希望尽可能快地验证数据。

当您试图保护凭据时,速度对您不利。拥有密码散列副本的攻击者将能够执行更多的暴力破解攻击,因为MD5和SHA1等的执行成本很低。

相比之下,bcrypt是故意昂贵的。当有一次或两次尝试由真正的用户进行身份验证时,这并不重要,但暴力破解的代价要高得多()。

票数 4
EN

Stack Overflow用户

发布于 2011-08-19 07:55:24

您正在有效地讨论实现PBKDF2或基于密码的密钥派生功能。实际上,它与BCrypt是一样的,优点是您可以延长派生密码所需的CPU时间。与BCrypt相比,这样做的优点是,通过知道您设置了多少次“迭代”,当您需要增加密码时,您可以执行操作,而无需重置数据库中的所有密码。只要让你的算法拿起最终结果,就像它在第n次迭代一样(其中n是前一次迭代次数),然后继续!

建议您使用适当的PBKDF2库,而不是创建自己的库,因为让我们面对它,就像所有的密码学一样,您知道某些东西是否安全的唯一方法是它是否已经过互联网的“测试”。(参见here)

使用此方法的系统:

.NET已经实现了一个库。查看here

linux和windows文件加密使用这种加密方法的许多(10,000+)版本来保护它们的文件系统。

Wi-Fi网络通常使用这种加密方法进行保护

Source

谢谢你问这个问题,它迫使我研究我用来保护我的密码的方法。

TTD

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7072478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档