浏览器端密码安全:生成、加密、哈希与测试——无需服务器
浏览器端密码与加密工具实用指南——即时生成强密码、使用 AES-256 加密文本、使用 PBKDF2 哈希密码,并实时检测密码强度。
每位开发者和注重安全的用户最终都会需要同一套工具:生成强密码、加密敏感文本、对密码进行哈希处理以便存储,或者验证哈希值是否匹配。过去,这些操作需要安装 OpenSSL 或专用应用程序。如今,Web Crypto API 已足够强大,可以完全在浏览器内完成所有这些操作——无需任何服务器交互,数据完全不离开你的设备。
以下是这些核心工具的全面介绍,以及如何有效使用每一个工具。
1. 密码生成器:创建密码的正确方式
人类天生不擅长创建随机密码。我们会在无意识中使用规律——字典单词、姓名、年份、键盘连击如 qwerty123。真正的随机密码生成器能避免所有这些问题。
我们的密码生成器使用 crypto.getRandomValues()——内置于所有现代浏览器的加密级安全随机数生成器。它与 Math.random() 的区别在于:
Math.random()是伪随机序列——只要知道种子就可以预测crypto.getRandomValues()从操作系统级熵源取样——真正不可预测
推荐设置:
| 使用场景 | 长度 | 选项 |
|---|---|---|
| 网站登录 | 16+ | 大写、小写、数字、符号 |
| 数据库密码 | 24+ | 所有字符集 |
| 加密密钥口令 | 32+ | 所有字符集 |
| PIN(设备解锁) | 8+ | 仅数字 |
需要避免的情况:
- 少于 12 个字符的密码(现代 GPU 可暴力破解)
- 纯符号密码(许多服务会拒绝)
- 曾在任何地方使用过的密码
2. 密码强度检测器:提交前先了解强度
在设置密码之前——或者审查现有密码时——请使用我们的密码强度检测器进行检测。它会评估:
- 长度得分 —— 越长越好
- 字符集多样性 —— 小写、大写、数字、符号
- 常见规律 —— 字典单词、键盘序列、重复字符
- 熵值位数 —— 衡量密码猜测难度的数学指标
熵值得分是最客观的衡量标准。以当前计算速度,128 位熵的密码需要比宇宙年龄还长的时间才能被暴力破解。
"password" → 熵值:~11 位 ❌ 极差
"P@ssw0rd" → 熵值:~18 位 ❌ 仍然很差(存在规律)
"correct-horse-bat" → 熵值:~44 位 ⚠ 一般(字典单词)
"Kx9#mP2$vL7nQw" → 熵值:~87 位 ✅ 强
"mQ3$kX9#nP7&vL2@" → 熵值:~104 位 ✅ 非常强
3. AES-256 加密:使用军事级加密保护文本
需要存储私密笔记、加密配置值,或通过不安全渠道传输敏感文本?我们的 AES 加密/解密工具使用 AES-256-GCM——与银行、政府机构和端对端加密通讯应用所用相同的加密算法。
AES-256-GCM 工作原理(简化版)
- 你的口令通过 PBKDF2 经过 200,000 次迭代,派生出一个 256 位密钥
- 每次加密都会生成一个随机 IV(初始化向量)——确保相同明文每次加密结果不同
- 明文被加密,并生成一个认证标签——用于检测篡改
- 输出为 base64 编码:
IV + tag + 密文
明文:"API_KEY=sk_live_abc123"
口令:"my-strong-passphrase"
↓
加密结果:"a3Fm9K2...base64...Xp7nQ=="
安全特性:
- ✅ 零知识——不向任何服务器发送任何数据
- ✅ 认证加密——如果密文被篡改,解密将失败
- ✅ Salt + IV 随机化——相同输入每次产生不同输出
- ✅ 200,000 次 PBKDF2 迭代——抵御口令暴力破解
实际使用场景:
- 将
.env值加密后存储到笔记应用中 - 通过邮件/Slack 与同事共享密码(发送密文;通过不同渠道共享口令)
- 加密日记或个人笔记
- 以加密形式将 API 密钥存储在电子表格中
4. 密码哈希生成器:使用 PBKDF2 安全存储密码
如果你正在构建一个存储用户密码的应用,绝对不能以明文存储密码——也不能使用 MD5/SHA-1 这类弱哈希算法。我们的密码哈希生成器使用 PBKDF2-SHA256 来创建安全的密码哈希。
为什么选择 PBKDF2 而不是 MD5/SHA-256?
| 哈希算法 | 每次猜测耗时(GPU) | 迭代次数 | 评价 |
|---|---|---|---|
| MD5 | 0.001ms | 1 | ❌ 已破解 |
| SHA-256 | 0.002ms | 1 | ❌ 速度过快 |
| PBKDF2-SHA256 | 200ms+ | 200,000 | ✅ 适当 |
| bcrypt(cost 12) | 300ms+ | 自适应 | ✅ 适当 |
密码哈希的核心目的是让每次猜测都变得代价高昂。快速哈希对密码安全来说是灾难性的。
哈希格式输出:
pbkdf2$200000$<salt>$<hash>
每次哈希的 salt 都是随机生成的,这意味着相同的密码每次会产生不同的哈希值——从而防止彩虹表攻击。
5. TOTP / 2FA 生成器:测试你的身份验证器代码
我们的 TOTP / 2FA 生成器可生成与 Google Authenticator、Authy 以及任何符合 RFC 6238 标准的身份验证器应用兼容的基于时间的一次性密码。输入 Base32 密钥,即可获取当前 6 位验证码及倒计时。
使用场景:
- 验证你服务器的 TOTP 实现是否生成正确的验证码
- 在向用户部署 2FA 之前测试其设置
- 为已注册的密钥生成验证码(作为备用方法)
TOTP 验证码每 30 秒更新一次,与当前 UTC 时间绑定,在没有密钥的情况下在数学上不可预测。
6. Diceware 口令短语:易记且数学上足够强大
我们的 Diceware 密码生成器从 EFF 词表中创建口令短语——与安全研究人员用于主密码和磁盘加密密钥的方法相同。
示例:correct-horse-battery-staple-voyage
为什么口令短语在作为主密码时优于随机字符密码:
| 密码 | 熵值 | 记忆难度 |
|---|---|---|
Kx9#mP2$(8 个字符) |
~52 位 | 非常难记 |
correct-horse-battery(3 个单词) |
~58 位 | 容易记 |
correct-horse-battery-staple(4 个单词) |
~77 位 | 较容易记 |
correct-horse-battery-staple-voyage(5 个单词) |
~96 位 | 可以记住 |
对于密码管理器的主密码——你必须记住且绝不能写下来——5 个单词的 Diceware 口令短语是安全性与记忆难度之间的最佳平衡。
安全检查清单
在部署任何身份验证系统之前,请逐项检查:
- ✅ 使用密码生成器生成密码——使用
crypto.getRandomValues() - ✅ 使用密码强度检测器验证密码强度——特权账户目标为 80+ 熵值位数
- ✅ 使用 PBKDF2、bcrypt 或 Argon2 对存储的密码进行哈希处理——使用密码哈希生成器验证输出格式
- ✅ 使用 AES 加密对静态敏感值进行加密——使用 AES-256-GCM,而非 AES-ECB
- ✅ 启用 2FA 并使用 TOTP 生成器测试验证码
- ✅ 对于主密码,使用 Diceware 生成器——最少 5 个单词
核心理念:本列表中的每个工具都完全在你的浏览器中运行。你的密码、明文和哈希值永远不会离开你的设备。这不是一项附加功能——而是安全工具的最低可接受标准。