参考 https://npmtrends.com/argon2-vs-pbkdf2
按照如下的分析,应该 argon2 更应该被推广使用
在项目中选择密码哈希算法时,主要考虑以下因素:安全性、性能、可用性和社区支持。以下是关于 Argon2 、bcrypt 、scrypt 和 PBKDF2 的简要比较:
安全性:
性能:
可用性:
社区支持:
综合考虑上述因素,Argon2 (尤其是 Argon2id 变体)通常是首选算法,因为它在安全性和性能方面表现最佳。如果项目中 Argon2 的支持有限,可以考虑使用 bcrypt 或 scrypt 。PBKDF2 应该作为最后的选择,仅在其他选项不可用时使用。
![]() |
1
liuidetmks 205 天前
pbkdf2 系统内置,而且是标准。方便
对普通人来说,强度应该够了。 |
2
optional 205 天前 via iPhone
印象中大都用的 bcrypy 吧,pkb 用的多的来源是哪里?
|
3
wenerme OP |
4
wenerme OP @liuidetmks 什么系统内置 pbkdf2 ?一般只见内置 bcrypt
|
![]() |
5
Bromine0x23 205 天前
这不只统计了 npm 么
|
![]() |
6
liuidetmks 205 天前
@wenerme
iOS/mac commoncrypto -> commonkeyderivation -> CCKeyDerivationPBKDF https://opensource.apple.com/source/CommonCrypto/CommonCrypto-60049/include/CommonKeyDerivation.h.auto.html 浏览器 webcrypto api 也内置了 pbkdf2 ,https://developer.mozilla.org/zh-CN/docs/Web/API/SubtleCrypto/deriveKey 客户端和浏览器都有现成的实现,多端统一会减少很多工作量吧。 |
![]() |
7
lysS 205 天前
|
8
conn457567 204 天前 via Android
歪一下楼,使用 pdkdf2 加密密码的最佳实践是什么,搜到的介绍里面,这个算法的加密安全性取决于迭代次数,现在我的服务设置的迭代次数是 1W 多次,虽然是安全了,但是每天半夜被人攻击时就回 CPU 告警。现在问题变成攻击者虽然没有破解密码,但是可以直接把我的服务器打死,是我的使用方式不对吗?
|
![]() |
9
xuanbg 204 天前 ![]() 密码防爆破的正确姿势是限流啊!!!限制最小间隔为 1 秒,连续错 5 次就锁定 5 分钟。锁定期无论对错一律返回密码错误,这样哪怕你碰到了正确的,也会错过,然后就永远都不可能对了。加密强度高只能防脱裤碰撞,但你这个利人不利己,别的毫无作用。
|
![]() |
10
liuidetmks 203 天前 ![]() @conn457567 这种密钥派生一般是放在用户端操作 ,用户上传上来服务端只需要做比对就行
放在服务端有两个缺点 1. 消耗大量服务端资源 2. 用户原始密码可能被中间人截取 用户端 key = KDF (“密码”) 服务端收到 key ,然后做一个 Hash (这里做 hash 是防止注入攻击,推荐使用 blake ,速度快,安全不输 sha3 ), 如果是注册,就存库, 如果是登录,就和存库的做比较 这样,用户的口令就没其他人知道了。你只能重置,而不能获取到原文 |
11
conn4575 203 天前 via Android
@liuidetmks 懂了,我现在是客户端走的 https 明文传给服务端,服务端加密。
|