Rabbit Stream Cipher Decryption
Decrypt Rabbit stream cipher data from CryptoJS (Salted__ Base64 with a passphrase) or raw ciphertext with a 128-bit hex key and optional 64-bit IV.
Output uses the OpenSSL "Salted__" format in Base64 with key and IV derived from the passphrase – the same format as CryptoJS.Rabbit.encrypt(text, passphrase). OpenSSL itself has no Rabbit cipher.
Runs entirely in your browser. Your data is never uploaded.
What is Rabbit Decryption?
Decrypts data encrypted with the Rabbit stream cipher, typically produced by CryptoJS.Rabbit.encrypt. Paste the Base64 U2FsdGVkX1… string with its passphrase, or raw ciphertext with the hex key and IV.
How to use Rabbit Decryption
- Select the same Key source that was used to encrypt: Passphrase (OpenSSL-compatible) for
U2FsdGVkX1…("Salted__") data, or Raw key + IV (hex) for raw ciphertext. - Enter the passphrase or the 16-byte hex key (and the 8-byte IV if one was used).
- Paste the Ciphertext and click Decrypt.
Example
U2FsdGVkX19PD1rihUsU44L3vJkKAmy580QhQw== (passphrase "secret")
Hello Rabbit
Ciphertext from CryptoJS.Rabbit.encrypt("Hello Rabbit", "secret").
When to use Rabbit Decryption
Use it to read or debug data from applications that use CryptoJS Rabbit. It cannot decrypt without the right passphrase or key.
How Rabbit Decryption works
The salt is read from the Salted__ header, the 16-byte key and 8-byte IV are re-derived (EVP_BytesToKey MD5 or PBKDF2-SHA256), and the Rabbit keystream is XORed with the ciphertext. In raw mode your key and IV are used directly. Stream ciphers have no padding, so a wrong key shows up as invalid UTF-8 output.
Common Use Cases
- Decrypt values stored by a web app using CryptoJS.Rabbit
- Check that your Rabbit implementation matches CryptoJS
- Recover test data during debugging
- Migrate Rabbit-encrypted data to AES
Security Note
Rabbit has no known practical break, but it is rarely used, has no built-in integrity protection and few libraries support it. Use AES-GCM for new systems.
FAQs
Why do I get an "invalid UTF-8" error?
Most likely the passphrase or key is wrong; Rabbit cannot detect that itself. If the original data was binary, switch the output to Hex.
My ciphertext has no U2FsdGVkX1 prefix.
Then CryptoJS was called with an explicit key and IV. Choose Raw key + IV (hex) and enter them in hex.
Does it support RabbitLegacy?
No, only the standard CryptoJS.Rabbit variant.