Bcrypt 是用于散列还是加密?有点迷茫

Posted

技术标签:

【中文标题】Bcrypt 是用于散列还是加密?有点迷茫【英文标题】:Is Bcrypt used for Hashing or Encryption? A bit of confusion 【发布时间】:2012-02-20 14:14:28 【问题描述】:

我一直在阅读有关bcrypt(应用程序视角)的信息。考虑用它在我的网站上存储密码。

根据我阅读的一些内容,它建议两种方式:

例如1:Bcrypt 是来自bcrypt 的跨平台文件加密实用程序 例如2:bcrypt 是一种自适应密码散列算法,它使用 Blowfish 密钥调度,而不是对称加密算法。来自How To Safely Store A Password bcrypt 是 Niels Provos 和 David Mazières 设计的密码自适应加密哈希函数,基于 Blowfish 密码:来自bcrypt wiki

Bcrypt 到底是什么?

【问题讨论】:

Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Cryptography Stack Exchange 或Information Security Stack Exchange 会是一个更好的提问地点。 @jww 5 年后这个问题没有被标记为离题。 【参考方案1】:

两者都是:)

大多数时候人们提到 BCrypt 时,他们指的是adaptive hash algorithm,但它也是unrelated file encryption utility 的名称。

两者都基于 Blowfish 密码。

【讨论】:

那么,你的意思是说我将使用adaptive hash algorithm,当我使用 bcrypt 存储密码时? @ThinkingMonkey。是的,只要你选对了。我将(您的)链接添加到我的答案中,希望能更清楚地说明差异。 不错。我实际上有问题中提到的相同链接。 :)【参考方案2】:

Bcrypt 加密软件使用 Bruce Schneier 在 1993 年设计的 Blowfish 算法。[1]

bcrypt 散列函数就是这样,一个散列函数。它不执行加密,它是散列。它基于 Blowfish 密码,被认为是一件好事,因为您可以 make it slower over time。

来自***:

这在密码学上并不明显比标准强 Blowfish 密钥时间表,但密钥更新轮数是 可配置;因此散列过程可以任意进行 慢,这有助于阻止对哈希或盐的暴力攻击。

关于在您的网站上存储密码,您应该在散列密码之前对其进行加密。

只有在您使用某种加密算法(例如 Blowfish,Rijndael / AES)对其进行加密后,您才应该使用 bcrypt 对加密密码进行哈希处理,并存储密码哈希

有关实施密码安全的更多详细信息,请参阅this question 的最佳答案。

【讨论】:

他的名字是'Schneier',而不是'Schneider'。 吹毛求疵 :) 你不需要在散列之前加密。 @PaulG 如果您也进行加密,它确实会增加额外的安全级别,并且被认为是一种好的做法,只要您将密钥存储在不同的服务器上,或者如果这太昂贵,在远程服务器本地文件系统上的文本文件。 @PaulG 此链接解释了盐哈希的最佳实践和使用密钥加密盐哈希。 BCrypt 只是一种更方便的 salt hash 方法,因为 salt 不需要数据库存储:crackstation.net/hashing-security.htm @CharlesRobertson - 为什么在散列之前加密密码会使其更安全?让它在计算上更昂贵? Bcrypt 在这方面已经可以调整了。它会使哈希值更长,但使用更长的盐会达到同样的效果。我确实阅读了您的链接,据我所知,它没有提到这个过程。【参考方案3】:

bcrypt 是密码的密钥派生函数

散列(由bcrypt使用)和简单的话加密之间的区别将是 -

1) 加密数据可以通过私钥解密。 2)散列是一种方法,如果您将纯文本散列为不可逆的,因此更安全。确保的唯一方法是重新散列纯文本并将其与先前散列的数据进行比较以确保相等。

【讨论】:

以上是关于Bcrypt 是用于散列还是加密?有点迷茫的主要内容,如果未能解决你的问题,请参考以下文章

javascript 用于散列密码的Bcrypt助手

Golang 中的 Bcrypt 密码散列(与 Node.js 兼容)?

使用 bcrypt 散列密码迁移系统

php密码加密(密码散列)

我应该使用啥列类型/长度将 Bcrypt 散列密码存储在数据库中?

如何迁移密码哈希?