随机密钥生成
Random Key Generator
按指定长度生成密码学随机字节,输出十六进制、Base64 或 Base64URL,用作应用的 secret。
一个 `SECRET_KEY` 或者 JWT 签名密钥,需要的是指定长度、指定编码的随机字节,而常见的临时凑合——乱敲键盘、一个 UUID、项目名的哈希——熵都比看起来少。这里产出这些字节并编码。
随机密钥串
FjJJH_0aUHKakXGpAtdXK0OLXfXxIDCCbv2GrnGXoEY以 JWK(oct)查看
{
"kty": "oct",
"k": "FjJJH_0aUHKakXGpAtdXK0OLXfXxIDCCbv2GrnGXoEY",
"ext": true
}WebCrypto 密钥
一个真正的 CryptoKey,导出成 JWK,可以直接交给 crypto.subtle 用。
每一个字节都来自 crypto.getRandomValues,而且不会离开这个标签页。既不在服务器上生成,也不会送到服务器去。
怎么用
选择字节长度
32 字节(256 比特)几乎覆盖一切——HMAC-SHA256、AES-256、会话密钥。对这些算法来说更长并不更强;有用的长度由算法定义。
选配置需要的编码
十六进制没有歧义,长度是两倍。Base64URL 避开了 `+`、`/` 和 `=`,在 URL、请求头或者会被别的东西解析的 `.env` 文件里,你要的就是这个。
放进密钥存储,不要放进仓库
提交过一次的密钥就是必须轮换的密钥,不管那次提交回滚得多快。每个环境生成一个不同的。
常见问题
随机性来自哪里?
`crypto.getRandomValues`,浏览器的 CSPRNG,由操作系统播种。什么都不传输,什么都不保存。
浏览器里生成的密钥和 `openssl rand` 出的一样好吗?
随机性的质量相同——两者都取自操作系统。区别在于密钥显示在哪里:在屏幕上,可能在一个会同步的浏览器里,可能有一个扩展在盯着 DOM。在不由你控制的机器上,用命令行。
能用它生成 UUID 吗?
用 UUID 生成器——UUIDv4 有固定布局,有六个比特用在版本和变体上,所以一串原始随机字符串不是一个有效的 UUID。
可以从这些接进来
UUID 生成
UUID Generator
批量生成 UUID v1、v4、v5 和 v7,并能从 v1 或 v7 的值里解出时间戳。
ULID 与 NanoID 生成
ULID & NanoID Generator
按指定的字母表和长度生成可排序的 ULID 或短小的 NanoID,并给出碰撞概率。
HMAC 生成
HMAC Generator
按选定的哈希算法和密钥编码算出消息的 HMAC,用来核对 webhook 签名。
文本加密解密
Text Encrypt & Decrypt
用一个口令做 AES-GCM 加密,产出一段自带全部参数的 Base64 密文。
接下来
这些工具吃得下当前工具的产出,结果可以直接送过去。
.env 文件解析与转换
.env Parser & Converter
解析 .env 文件,并转成 JSON、YAML、shell export、Docker 或 Kubernetes 格式。
HMAC 生成
HMAC Generator
按选定的哈希算法和密钥编码算出消息的 HMAC,用来核对 webhook 签名。
密码生成器
Password Generator
按长度、字符集和是否排除易混字符的规则生成随机密码,需要的话可以一次生成很多条。
UUID 生成
UUID Generator
批量生成 UUID v1、v4、v5 和 v7,并能从 v1 或 v7 的值里解出时间戳。
可疑链接检查
Suspicious URL Check
在你点开之前先看这条链接长什么样——混淆字符、直接写 IP 的主机、@ 障眼法、层层子域、奇怪端口、短链服务——需要时还能追踪跳转并查域名注册时间;没有信誉库。
Base64 编码解码
Base64 Encoder & Decoder
对文本和文件做 Base64 与 Base64URL 编解码,UTF-8 处理正确。