Rabbit 流密码加密
用 Rabbit 流密码(RFC 4503,eSTREAM)加密文本,可使用 CryptoJS 格式的口令,或 128 位十六进制密钥和 64 位 IV。在本地运行。
输出为 Base64 编码的 OpenSSL “Salted__” 格式,密钥和 IV 由口令派生——与 CryptoJS.Rabbit.encrypt(text, passphrase) 格式相同。OpenSSL 本身不支持 Rabbit。
完全在浏览器中运行,您的数据不会被上传。
什么是 Rabbit 加密?
使用 Rabbit 加密数据,这是 eSTREAM 组合中的一种快速 128 位流密码(RFC 4503)。它主要出现在使用 CryptoJS.Rabbit 的 JavaScript 项目中,本工具生成的输出与之兼容。
如何使用 Rabbit 加密
- 选择口令(兼容 OpenSSL)并输入口令,或选择原始密钥 + IV(十六进制),使用 16 字节密钥和可选的 8 字节 IV。
- 输入或粘贴明文。
- 点击加密,选择 Base64 或 Hex 输出并复制结果。
示例
Raw key 000102030405060708090a0b0c0d0e0f, IV 0001020304050607, plaintext "Rabbit stream", Hex output
a0e87bbfc85cd88a7e42510ffa
使用相同密钥和 IV 时,与 CryptoJS.Rabbit 的结果相同。
何时使用 Rabbit 加密
用于与使用 CryptoJS Rabbit 的应用互通,或测试此类代码。新设计请选择 AES-GCM 或 ChaCha20-Poly1305,它们是标准化且带认证的。
Rabbit 加密 的工作原理
Rabbit 保存 513 位内部状态(八个 32 位状态字、八个计数器和一个进位位),每次迭代输出 128 位密钥流,并与数据异或。密钥为 128 位;可选的 64 位 IV 使每条消息的密钥流都是唯一的。口令模式用 EVP_BytesToKey(MD5)或 PBKDF2-SHA256,由口令和随机盐派生密钥和 IV,并输出 Base64 的 Salted__ 数据——与使用 MD5 选项的 CryptoJS.Rabbit.encrypt(text, passphrase) 完全相同。十六进制原始密钥按 CryptoJS 的方式以字节流顺序读取;RFC 4503 把测试向量写成大端数字,即每个 16 字节分组被反转。
常见用例
- 调试时复现
CryptoJS.Rabbit.encrypt的输出 - 为使用 Rabbit 的 JavaScript 应用创建测试数据
- 对比流密码与 RC4 的行为
- 检查 RFC 4503 密钥流向量
安全提示
Rabbit 目前没有已知的实际破解方法,但它很少被使用,没有内置的完整性保护,支持它的库也很少。新系统请使用 AES-GCM。
常见问题
这与 CryptoJS 兼容吗?
兼容。使用 EVP_BytesToKey(MD5)的口令模式与 CryptoJS.Rabbit.encrypt(text, "passphrase") 一致,原始模式与显式传入密钥和 IV WordArray 的 CryptoJS 一致。
OpenSSL 能解密 Rabbit 吗?
不能,OpenSSL 没有实现 Rabbit。只有容器格式(Salted__ + 盐)是相同的。
需要 IV 吗?
对 Rabbit 来说 IV 是可选的,但没有 IV 时,同一个密钥总会产生相同的密钥流。口令模式总是从随机盐派生出新的 IV。