Ansible Vault 加密与解密
编码所有处理都在浏览器本地完成,数据不上传服务器
输入
把文件拖到这里可直接载入
输出
与 `ansible-vault` 逐字节兼容:密钥由 PBKDF2-HMAC-SHA256(口令, salt, 10000 轮, 80 字节) 派生,前 32 字节做 AES-256-CTR 的密钥、再 32 字节做 HMAC、最后 16 字节当 IV;文件体是双层十六进制,含 salt 与 HMAC。解密时先验 HMAC 再解密,所以口令错会得到一句明确的报错,而不是一堆乱码。支持 `$ANSIBLE_VAULT;1.2;AES256;标签` 形态的 vault-id。所有计算在浏览器本地完成,口令与明文都不上传。
功能
- 与 ansible-vault 相同的密钥派生:PBKDF2-HMAC-SHA256,10000 轮
- AES-256-CTR(计数器整块递增)+ PKCS#7 填充
- 双层十六进制封装与每行 80 字符折行
- 支持 1.1 与 1.2(vault-id 标签)两种表头
- 解密前先校验 HMAC,口令错直接报错而非解出乱码
- 加密时 salt 走 crypto.getRandomValues
- 纯 JS 的 AES,不依赖只在 https 下存在的 Web Crypto
- 每行可单独复制,也可复制全部
使用方法
- 选择加密或解密,填好口令
- 加密:把明文粘进输入框(可选填 vault-id 标签)
- 解密:把整份 `$ANSIBLE_VAULT` 文本粘进输入框
- 结果与拆解(salt、HMAC、文件头)即时给出
常见问题
- 口令错了会怎样?
- 会明确报「HMAC 校验失败」。这与不少对称加密不同 —— 那些没有校验机制,用错密钥常常也能「成功」解出一堆随机字节。Ansible 是先验 HMAC 再解密的,所以这里也是一句清楚的错,而不是让你对着一屏乱码猜原因。
- 文件为什么是双层十六进制?
- Ansible 的文件体先是 `hex(salt) \n hex(hmac) \n hex(密文)` 这段 ASCII 文本,整体再做一次十六进制编码,最后每行 80 字符折行。只解一层会得到看着像文本、其实是十六进制的东西 —— 那正是 Ansible 自己的格式,不是这里实现错了。
- 口令保护够强吗?
- Vault 用的是 10000 轮 PBKDF2,按今天的标准偏少,能扛住的是口令本身的强度。换格式版本会破坏兼容性,所以别指望它变强 —— 用一个长而随机的 Vault 口令,别用字典词。
- 能加解密二进制内容吗?
- 不能。这个工具按 UTF-8 文本处理,解出来不是合法文本时会明确报出来(比如加密的是密钥库之类的二进制)。二进制请用 `ansible-vault` 命令。
相关工具
AES / DES 加解密
编码用 AES、DES 或 3DES 加解密文本,支持 CBC、GCM、CTR、ECB 四种模式,密钥可写文本、十六进制或 Base64,全部在本地完成。
HMAC 签名
编码用密钥与消息算出 HMAC 签名,含空格与中文的密钥也能与 Node、Java、Python 算出一致结果。密钥只在本机参与运算,不会发出去。
哈希计算
编码算出文本的 MD5、SHA-1、SHA-256 或 SHA-512 摘要,也可算老系统用的 MD4 与 MD2,中文按 UTF-8 字节计算。全部在本地完成。
Base64 编解码
编码把文本转成 Base64,或把 Base64 还原成文本,中文与 emoji 都按 UTF-8 正确处理。全部在浏览器本地完成,内容不上传。
URL 编解码
编码把中文、空格与符号转义成 %XX,或把 %XX 还原成文本;整条 URL 与单独的参数值要选对方式,选错不会报错,但链接会打不开。全部在浏览器本地完成。
HTML 实体编解码
编码把 < > & 与引号转成 HTML 实体,也能把实体还原成字符,而且只解一遍:&lt; 得到的是 < 而不是尖括号。全部在浏览器本地完成。