piapia123
zh

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
  • 每行可单独复制,也可复制全部

使用方法

  1. 选择加密或解密,填好口令
  2. 加密:把明文粘进输入框(可选填 vault-id 标签)
  3. 解密:把整份 `$ANSIBLE_VAULT` 文本粘进输入框
  4. 结果与拆解(salt、HMAC、文件头)即时给出

常见问题

口令错了会怎样?
会明确报「HMAC 校验失败」。这与不少对称加密不同 —— 那些没有校验机制,用错密钥常常也能「成功」解出一堆随机字节。Ansible 是先验 HMAC 再解密的,所以这里也是一句清楚的错,而不是让你对着一屏乱码猜原因。
文件为什么是双层十六进制?
Ansible 的文件体先是 `hex(salt) \n hex(hmac) \n hex(密文)` 这段 ASCII 文本,整体再做一次十六进制编码,最后每行 80 字符折行。只解一层会得到看着像文本、其实是十六进制的东西 —— 那正是 Ansible 自己的格式,不是这里实现错了。
口令保护够强吗?
Vault 用的是 10000 轮 PBKDF2,按今天的标准偏少,能扛住的是口令本身的强度。换格式版本会破坏兼容性,所以别指望它变强 —— 用一个长而随机的 Vault 口令,别用字典词。
能加解密二进制内容吗?
不能。这个工具按 UTF-8 文本处理,解出来不是合法文本时会明确报出来(比如加密的是密钥库之类的二进制)。二进制请用 `ansible-vault` 命令。

相关工具