systemslibrarian/crypto-lab-bcrypt-forge

GitHub: systemslibrarian/crypto-lab-bcrypt-forge

一个纯浏览器端的 bcrypt 密码哈希算法交互式教学演示,通过实时计算和可视化帮助开发者理解 bcrypt 的结构、开销因子、时序安全验证及在数据泄露场景下的实际表现。

Stars: 0 | Forks: 0

# crypto-lab-bcrypt-forge ## 它是什么 bcrypt 是由 Niels Provos 和 David Mazières(1999 年)设计的一种密码哈希函数,基于 Blowfish 加密算法构建,具有特意设计的慢速和自适应开销因子。它是生产系统中部署最广泛的密码哈希方案,在 Rails、Node.js、PHP 和 Linux PAM 中默认使用。其自适应开销因子允许在不改变存储哈希格式的情况下,随着硬件的升级维持安全性。其安全模型是单向的:哈希无法被逆向还原,只能进行验证。 ## 何时使用 - ✅ 在任何 Web 应用程序中存储用户密码 - ✅ 当您的技术栈默认使用 bcrypt 时(Rails、PHP、Node.js) - ✅ 当不需要 FIPS 合规性且 Argon2 不可用时 - ✅ 从明文、MD5 或原始 SHA 密码迁移时 - ❌ 不要用于通用数据加密(请使用 AES-256-GCM) - ❌ 不要用于 API token 或会话 ID(请使用安全的随机字节) - ❌ 对于可以自由选择的新系统,建议优先选择 Argon2id - ❌ 不要将其视为生产级加密——这是一个教学演示,而不是经过严格安全加固的身份验证系统 ## 在线演示 **[systemslibrarian.github.io/crypto-lab-bcrypt-forge](https://systemslibrarian.github.io/crypto-lab-bcrypt-forge/)** 六个展示模块:带有颜色标注输出的 bcrypt 结构剖析、带有开销滑块和计时的实时哈希生成器、开销因子 8–14 的基准测试、带有攻击可视化工具的时序安全验证、算法对比表(bcrypt vs Argon2id vs PBKDF2 vs MD5),以及展示明文 vs MD5 vs bcrypt 结果的真实数据泄露模拟。 每个哈希都是**真实、在您的浏览器中计算**的——绝非模拟。所有 CPU 密集型任务(bcrypt、PBKDF2、MD5)都在 **Web Worker** 中运行,因此即使在开销为 14 进行哈希时,UI 也能保持流畅。 ## 可能出现的问题 - **72 字节输入限制:** bcrypt 只会对密码的前 72 字节进行哈希处理,因此非常长或多字节的密码可能会因为共享前缀而发生碰撞。 - **Null 字节截断:** 某些 bcrypt 实现会在第一个 NUL 字节处截断,从而悄无声息地削弱包含该字符的密码的安全性。 - **开销因子设置过低:** 几年前安全的开销,随着硬件的改进可能会变得容易被暴力破解,因此必须随着时间推移提高该值。 - **开销因子设置过高:** 过高的开销在负载情况下可能会使登录变成一种拒绝服务攻击的途径。 - **选错加密原语:** bcrypt 是用于密码的,而不是用于通用加密、API token 或会话标识符的。 ## 实际应用 - Ruby on Rails 的 `has_secure_password` 默认使用 bcrypt。 - PHP 的 `password_hash()` 默认使用 bcrypt 算法。 - Node.js 应用程序广泛使用 `bcrypt` / `bcryptjs` 库进行凭证存储。 - Linux PAM 和许多 Web 框架已将 bcrypt 作为默认的密码哈希算法。 ## 如何在本地运行 ``` git clone https://github.com/systemslibrarian/crypto-lab-bcrypt-forge cd crypto-lab-bcrypt-forge npm install npm run dev ``` ## 相关演示 - [crypto-lab-kdf-arena](https://systemslibrarian.github.io/crypto-lab-kdf-arena/) — HKDF、PBKDF2、scrypt 和 Argon2id 的对比。 - [crypto-lab-kdf-chain](https://systemslibrarian.github.io/crypto-lab-kdf-chain/) — 跨 HKDF/PBKDF2/scrypt/Argon2id 链式 KDF。 - [crypto-lab-phantom-vault](https://systemslibrarian.github.io/crypto-lab-phantom-vault/) — 实践中的 PBKDF2-SHA-256 密钥派生。 - [crypto-lab-shadow-vault](https://systemslibrarian.github.io/crypto-lab-shadow-vault/) — 结合 ChaCha20-Poly1305 加密的 Argon2id。 - [crypto-lab-hash-zoo](https://systemslibrarian.github.io/crypto-lab-hash-zoo/) — 底层哈希家族以及密码哈希为何不同。 ## 架构 - **无框架。** 纯 TypeScript,结合带有设计令牌的原生 CSS,移动优先,符合 WCAG 2.1 AA 标准,支持深色/浅色主题以及 `prefers-reduced-motion`。 - **Web Worker 加密。** `src/crypto-worker.ts` 在主线程之外运行 bcrypt、PBKDF2 和 MD5;`src/crypto-client.ts` 是一个基于 promise 的 RPC 包装器。计时是在 Worker*内部*测量的,因此基准测试数据反映的是原始加密原语,而不是调度开销——而且 UI 永远不会卡死。 - **纯粹且经过测试的核心。** `src/lib.ts` 包含了不依赖 DOM 的辅助函数(MD5、bcrypt 哈希解析、时长格式化),这些函数由 `npm test` 覆盖测试——包括 MD5 的已知答案向量和 bcryptjs 的往返集成测试。 ## 部署到 GitHub Pages 本仓库包含一个位于 `.github/workflows/deploy-pages.yml` 的工作流。 1. 推送到 `main` 分支。 2. 在 GitHub 中,转到 **Settings > Pages**。 3. 将 **Source** 设置为 **GitHub Actions**。 4. 等待 **Deploy to GitHub Pages** 工作流完成。 您的站点将发布在: **https://systemslibrarian.github.io/crypto-lab-bcrypt-forge/** *这是 [Crypto Lab](https://crypto-lab.systemslibrarian.dev/) 套件中 120 多个浏览器演示之一。* *"所以,你们或吃或喝,或做任何事,都要为荣耀神而行。" — 哥林多前书 10:31*
标签:Web Worker, 云安全态势管理, 前端应用, 可视化教学, 哈希算法, 安全科普, 密码学, 手动系统调用, 自动化攻击