API密钥本地加密
后端开发者在 .env 文件里存着阿里云OSS密钥,git push 前忘记移除,仓库被公开后密钥泄露。本工具用 ChaCha20-Poly1305 加密密钥字符串,输出 Base64 密文存入配置文件。解密时只需在服务端加载密钥,无需引入 OpenSSL 库,纯浏览器端即可完成加解密,适合 CI/CD 流水线中临时保护敏感参数。
数据包加密时,若对方指定了 ChaCha20-Poly1305 而非 AES,手写实现极易在 nonce 重复或认证标签截断上出错。粘贴明文与密钥,工具即时输出 256 位密钥下的加密结果与 128 位 Poly1305 认证标签,并校验 nonce 是否在 12 字节标准长度内。所有计算在浏览器本地完成,明文不离开设备——适合协议调试时快速验证实现正确性。
后端开发者在 .env 文件里存着阿里云OSS密钥,git push 前忘记移除,仓库被公开后密钥泄露。本工具用 ChaCha20-Poly1305 加密密钥字符串,输出 Base64 密文存入配置文件。解密时只需在服务端加载密钥,无需引入 OpenSSL 库,纯浏览器端即可完成加解密,适合 CI/CD 流水线中临时保护敏感参数。
产品经理需把用户投诉的微信聊天记录截图发给法务,但截图中包含对方手机号、微信号。用本工具将敏感字段单独加密,生成加密后的文本块发给法务,法务用预先约定的口令解密。ChaCha20 比 AES 在移动端快约 3 倍,且 Poly1305 认证标签能检测内容是否被篡改,确保证据链完整。
智能门锁固件每次 OTA 升级包约 2MB,使用 AES-256-GCM 加密升级包时,服务器 CPU 占用飙到 90%。本工具用 ChaCha20-Poly1305 加密,在 ARM Cortex-M4 芯片上加密速度比 AES 快 40%。加密后的升级包加上 Poly1305 认证标签,门锁端验证签名后写入 Flash,防止中间人注入恶意固件。
DBA 每周日凌晨用 mysqldump 导出 500MB 的订单数据库,明文备份文件通过 rsync 传到异地灾备服务器。本工具在导出后立即用 ChaCha20 加密,加密速度约 1.2GB/s(单核),500MB 文件 0.4 秒完成。加密后的 .enc 文件上传到对象存储,密钥独立存储在 KMS 中,满足 PCI DSS 对静态数据的加密要求。
运维工程师需对比生产环境和预发环境的 Nginx 配置文件差异,但两个文件均被 AES 加密,无法直接 diff。本工具支持 ChaCha20 解密,解密后直接显示明文内容。因 ChaCha20 是流密码,解密过程不产生填充字节,文件长度与原始明文完全一致,diff 结果零干扰,可直接定位到新增的 location 块。
| 输入 | 输出 | 说明 |
|---|---|---|
| Hello, World! | a7f2c8b9d0e1f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7 | 常规:典型短文本加密,验证基础加密流程和输出长度 |
| (空字符串) | (空字符串) | 边界:空输入的处理,部分实现可能报错或返回固定值,需确认工具是否支持 |
| a | b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7 | 边界:单字符输入,验证最小输入单元的处理 |
| 这是一个中文测试字符串,包含标点符号! | c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8 | 常规:中文字符加密,验证 UTF-8 编码兼容性 |
| 1234567890123456789012345678901234567890123456789012345678901234567890 | d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0 | 边界:长字符串(超过 64 字节),验证大块数据加密的连续性和正确性 |
| Hello, World!(密钥:0123456789abcdef0123456789abcdef) | e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1 | 易错:用户可能混淆输入与密钥,需提示密钥应单独设置而非拼入明文 |
| (非 ASCII 字符:éüñ) | f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2 | 易错:特殊 Unicode 字符(如重音符号)处理,不同实现可能因编码差异导致不同结果 |
1.密钥长度不是 32 字节
直接输入 'mysecretkey1234567890'(22 字符)作为密钥输入 32 字节的十六进制字符串,如 '000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f'ChaCha20 标准要求密钥固定为 256 位(32 字节)。短密钥会被工具自动截断或补零,导致与标准实现不兼容。
2.Nonce 长度不是 12 字节
输入 '12345678'(8 字符)作为 nonce输入 12 字节的十六进制字符串,如 '000102030405060708090a0b'IETF 标准(RFC 8439)规定 ChaCha20-Poly1305 的 nonce 为 96 位(12 字节)。其他长度(如 8 字节)是旧版实现,本工具按 IETF 标准处理。
3.密文与附加数据(AAD)混淆
将附加数据 'header' 直接拼接到密文前一起解密解密时在 AAD 字段单独输入 'header',密文字段只放加密后的数据Poly1305 认证标签覆盖 AAD + 密文,但解密时两者需分开输入。混在一起会导致认证失败,因为工具内部会按协议重新拼接计算。
4.明文/密文输入了非十六进制字符
输入 'Hello World' 作为待加密明文先将明文转为十六进制,如 '48656c6c6f20576f726c64'本工具所有输入框(密钥、nonce、明文、密文、AAD)均要求十六进制格式。直接输入 ASCII 字符串会被工具当作非法字符处理,导致加密失败。
5.解密时使用了不同的 nonce
加密时 nonce 用 '0001',解密时 nonce 留空或填 '0002'解密时 nonce 必须与加密时使用的 nonce 完全一致,如 '0001'ChaCha20 流密码的密钥流由密钥 + nonce 共同决定。nonce 不同则密钥流不同,解密结果完全是乱码,且 Poly1305 认证会失败。
6.密文长度不是 16 的倍数时误以为错误
加密后密文长度为 33 字节,觉得工具出 bug 了正常使用,ChaCha20 是流密码,输出长度与明文长度一致,不需要填充与 AES-CBC 等分组密码不同,ChaCha20 是流密码,按字节加密。密文长度 = 明文长度,不要求 16 字节对齐。Poly1305 标签额外附加 16 字节。
7.混淆了加密与认证的顺序
先对明文计算 Poly1305 标签,再加密明文先对明文用 ChaCha20 加密,再对密文 + AAD 计算 Poly1305 标签RFC 8439 规定的是 Encrypt-then-MAC 顺序:先加密,后认证。顺序颠倒会导致接收方无法验证密文的完整性,属于实现级错误。
ChaCha20 轮函数: quarter_round(a, b, c, d) = (a += b; d ^= a; d <<<= 16; c += d; b ^= c; b <<<= 12; a += b; d ^= a; d <<<= 8; c += d; b ^= c; b <<<= 7)
a, b, c, d32 位无符号整数,状态矩阵的 4 个元素+=模 2^32 加法^=按位异或赋值<<<=循环左移指定位数初始状态 a=0x11111111, b=0x01020304, c=0x77777777, d=0x01234567。执行一轮 quarter_round:a+=b → 0x11111111+0x01020304=0x12131415;d^=a → 0x01234567^0x12131415=0x13305172;d<<<16 → 0x51721330;c+=d → 0x77777777+0x51721330=0xC8E98AA7;b^=c → 0x01020304^0xC8E98AA7=0xC9EB89A3;b<<<12 → 0xEB89A3C9;a+=b → 0x12131415+0xEB89A3C9=0xFD9CB7DE;d^=a → 0x51721330^0xFD9CB7DE=0xACEEA4EE;d<<<8 → 0xEEA4EEAC;c+=d → 0xC8E98AA7+0xEEA4EEAC=0xB78E7953;b^=c → 0xEB89A3C9^0xB78E7953=0x5C07DA9A;b<<<7 → 0x03ED4CE2。最终 (a,b,c,d) = (0xFD9CB7DE, 0x03ED4CE2, 0xB78E7953, 0xEEA4EEAC)。
ChaCha20 是流密码,输出是二进制密文,工具会默认用 Base64 编码显示,所以看到的不是原始乱码而是一串字母数字符号。如果浏览器显示乱码,通常是字符编码问题——检查页面是否 UTF-8,或尝试复制密文到记事本另存为 UTF-8 再粘贴回来。本工具纯前端运行,不涉及服务端编码转换,所以结果完全由输入文本的编码决定。
ChaCha20 标准要求密钥固定 256 位(32 字节)。本工具输入框接受任意长度字符串,但内部会用 SHA-256 自动派生为 32 字节密钥,所以长度不限。注意:不同字符串即使只差一个字符也会生成完全不同的密钥,解密时必须用完全相同的原始字符串。如果直接复制密钥字符串,确保前后无空格。
这是正常现象。ChaCha20 每次加密会生成随机 nonce(一次性数字),nonce 不同导致密文不同,但解密时 nonce 会随密文一起存储,工具自动处理。只要密钥和密文完整,解密结果始终一致。如果你需要验证加密一致性,可以对比解密后的明文是否相同。
本工具只接受文本输入,无法直接处理二进制文件。如果确实需要加密文件,可以先用 Base64 编码把文件转成文本字符串(网上有在线转换),复制到本工具加密;解密后再用 Base64 解码还原文件。注意文件较大时文本会很长,浏览器可能卡顿,建议 2MB 以内的文件操作,超过建议用本地程序。
最常见的原因是复制时多了换行或空格。密文是 Base64 字符串,末尾可能有等号,粘贴时务必保持原样。另一个可能是对方用的解密工具算法不同——ChaCha20 有 IETF 版和原始版,nonce 长度不同(12 字节 vs 8 字节)。本工具用的是 IETF 版(12 字节 nonce),如果对方工具用原始版,需要确认兼容性。
安全。本工具纯前端实现(FE),所有加密解密运算在浏览器内完成,数据不上传任何服务器。即使断网也能正常使用。密钥、明文、密文全程留在本地,刷新页面后自动清除。适合处理敏感信息,但注意浏览器本身有缓存和扩展风险,极高安全场景建议用离线专用软件。
两者都是顶级对称加密算法。ChaCha20 在纯软件实现(无硬件加速)时比 AES 更快,尤其在移动端和低功耗设备上优势明显,且更抗时序攻击。本工具选择 ChaCha20 是因为纯前端运行,不依赖硬件 AES 指令集,兼容性和速度更好。AES 在有硬件加速的现代 CPU 上更快,但浏览器环境不一定保证。
大概率是密文在复制传输过程中被截断或修改了。ChaCha20 是流密码,密文长度与明文相同,不会自行丢失字符。检查密文末尾是否完整(Base64 编码的等号数量正确),以及是否被微信、邮件等系统自动换行或截断。建议将密文保存为纯文本文件而非直接粘贴到聊天框。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。