为什么使用 Web Crypto API?
Web Crypto API 提供的 crypto.getRandomValues() 是浏览器内置的密码学安全伪随机数生成器(CSPRNG),满足密码学用途。而 Math.random() 只是普通伪随机,绝不能用于生成密钥。
hex / base64 / base64url 有什么区别?
hex:每字节 2 字符,纯 0-9a-f,可读性最好但最长。
base64:每 3 字节编码为 4 字符,使用 A-Z a-z 0-9 + / =,紧凑但包含特殊字符。
base64url:用 - 和 _ 替代 + 和 /,去掉填充 =,适合 URL、JWT 等场景。
密钥长度应该选多少?
对称加密(AES):128 位(16 字节)已足够安全;推荐 256 位(32 字节)。
HMAC 签名:等于哈希输出长度,HMAC-SHA256 用 32 字节,HMAC-SHA512 用 64 字节。
JWT Secret:建议 ≥ 32 字节。
如何安全地存储生成的密钥?
1. 不要提交到 Git 仓库(使用 .gitignore 排除 .env)。
2. 生产环境推荐使用密钥管理服务:AWS KMS、HashiCorp Vault、Azure Key Vault。
3. 开发环境可使用 .env 文件 + 环境变量。
4. 不要通过 IM/邮件等不安全渠道传输密钥。
刷新页面后密钥还在吗?
不会。所有生成结果仅保存在浏览器内存中,关闭或刷新页面即清空。本工具从不将密钥写入 localStorage 或发送到任何服务器。