Rabbit Stream Cipher Encryption
Encrypt text with the Rabbit stream cipher (RFC 4503, eSTREAM) using a passphrase in CryptoJS format or a 128-bit hex key and 64-bit IV. Runs locally.
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 Encryption?
Encrypts data with Rabbit, a fast 128-bit stream cipher from the eSTREAM portfolio (RFC 4503). It is mainly encountered in JavaScript projects that use CryptoJS.Rabbit, and this tool produces output compatible with it.
How to use Rabbit Encryption
- Choose Passphrase (OpenSSL-compatible) and type a passphrase, or Raw key + IV (hex) with a 16-byte key and an optional 8-byte IV.
- Type or paste the Plaintext.
- Click Encrypt, choose Base64 or Hex output and copy the result.
Example
Raw key 000102030405060708090a0b0c0d0e0f, IV 0001020304050607, plaintext "Rabbit stream", Hex output
a0e87bbfc85cd88a7e42510ffa
Same result as CryptoJS.Rabbit with the same key and IV.
When to use Rabbit Encryption
Use it to interoperate with an application that uses CryptoJS Rabbit or to test such code. For new designs choose AES-GCM or ChaCha20-Poly1305, which are standardised and authenticated.
How Rabbit Encryption works
Rabbit keeps 513 bits of internal state (eight 32-bit state words, eight counters and a carry bit) and outputs 128 keystream bits per iteration, which are XORed with the data. The key is 128 bits; an optional 64-bit IV makes each message's keystream unique. Passphrase mode derives the key and IV from passphrase and random salt with EVP_BytesToKey (MD5) or PBKDF2-SHA256 and outputs Base64 Salted__ data – identical to CryptoJS.Rabbit.encrypt(text, passphrase) with the MD5 option. Raw hex keys are read in byte-stream order as CryptoJS does; RFC 4503 prints its test vectors as big-endian numbers, i.e. each 16-byte block reversed.
Common Use Cases
- Reproduce
CryptoJS.Rabbit.encryptoutput for debugging - Create test data for a JavaScript app that uses Rabbit
- Compare stream-cipher behaviour with RC4
- Check RFC 4503 keystream vectors
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
Is this compatible with CryptoJS?
Yes. Passphrase mode with EVP_BytesToKey (MD5) matches CryptoJS.Rabbit.encrypt(text, "passphrase"), and raw mode matches CryptoJS with explicit key and IV WordArrays.
Can OpenSSL decrypt Rabbit?
No, OpenSSL does not implement Rabbit. Only the container format (Salted__ + salt) is the same.
Do I need an IV?
It is optional for Rabbit, but without an IV the same key always gives the same keystream. Passphrase mode always derives a fresh IV from the random salt.