Encrypt or decrypt any text using the Rabbit stream cipher. Supports passphrase‑based key derivation or raw 128‑bit hex key. Fully client‑side – your key never leaves your device. Includes official test vectors from RFC 4503.
Rabbit is a high‑performance stream cipher designed by Martin Boesgaard, Mette Vesterager, Thomas Pedersen, and Erik Zenner. It was submitted to the eSTREAM project and is included in the final portfolio (Profile 1, software). The algorithm is described in RFC 4503. It uses a 128‑bit key and a 64‑bit initialization vector (IV). This tool operates in key‑only mode (IV = 0) as defined in the RFC for standalone key use. Rabbit is optimized for software and provides a claimed security level of 128 bits.
Rabbit generates a pseudo‑random keystream from a 128‑bit key. Encryption/decryption is XOR of the keystream with the plaintext/ciphertext.
Rabbit was designed in 2003 by cryptographers from the Technical University of Denmark (DTU) and CRYPTICO A/S. It was one of the fastest stream ciphers submitted to the eSTREAM project, with throughput exceeding 1 Gbit/s in software. The cipher’s design is based on a combination of a non‑linear pseudo‑random generator and a linear feedback shift register (LFSR) but with a unique internal state of 513 bits. Extensive cryptanalysis over the years has not revealed any practical attacks, confirming its security margin. Rabbit is widely used in embedded systems, legacy encryption protocols, and as a lightweight cipher in some VPN solutions.
Rabbit uses an internal state of eight 32‑bit variables (xj) and eight 32‑bit counters (cj), updated by a non‑linear function. The keystream is produced by combining four of the state variables each iteration. The key setup expands the 128‑bit key into the initial state. The iteration function is:
for j = 0 to 7:
gj = (xj + cj)2 XOR ((xj + cj)2 >> 32)
(xj, cj) updated with carry propagation
The output is formed as s[0] = g0 XOR g3 XOR g6 and s[1] = g1 XOR g4 XOR g7. Detailed specification can be found in RFC 4503 §2.
In this tool we support two key input methods:
Verified with official RFC 4503 – click any vector to load the key and clear the message to see the raw keystream.
| Key (128‑bit hex) | First 16 bytes of keystream (hex) |
|---|---|
| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | 9C 51 E2 87 84 C1 E7 9F C5 5B 76 49 8A A2 78 7D |
| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 | 10 81 3D AF D8 1D 68 35 7F 62 12 9A 94 7E 3B BB |
| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 | D1 E0 D8 E6 B6 E6 7E E2 8E 60 8C 82 83 7A 81 5C |
| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 | 67 FF 16 EA 21 7F D1 98 21 9E 6C 48 75 C8 58 3A |
To verify: load a vector, leave message empty, click Encrypt. The output should match the keystream hex exactly (first 16 bytes).
A company maintained an old telemetry system that encrypted sensor data with Rabbit (no IV). After a hardware upgrade, they needed to decrypt archived logs. Using this tool, engineers extracted the 128‑bit hex key from documentation, pasted a hex ciphertext line, and instantly recovered the original readings. The ability to test with RFC vectors validated the tool's correctness before processing real data.
Rabbit has undergone extensive cryptanalysis. As of 2025, no practical attacks break the full 128‑bit security. However, like all stream ciphers, never reuse a key/IV pair. In this tool, IV is fixed to zero, so you must use a fresh key for each message. In practice, a unique IV should be used; this tool is meant for testing and legacy compatibility. For new systems, consider authenticated encryption (e.g., AES‑GCM).
We have verified this tool against all RFC 4503 test vectors. The implementation uses the default zero IV when the IV parameter is omitted.