Caesar Cipher Variations Explained
The Caesar Cipher Family
The Caesar cipher shifts every letter by a fixed number of positions in the alphabet. Julius Caesar reportedly used a shift of 3 — A became D, B became E. Modern variations use different shifts, creating the full family of 25 possible rotations.
ROT13 is the most famous member because it is self-inverse: encoding and decoding are the same operation. But every shift from 1 to 25 is a valid Caesar cipher with different properties.
All 25 Rotations
| Name | Shift | A→ | Z→ | Self-inverse? |
|---|---|---|---|---|
| ROT1 | 1 | B | A | No |
| ROT2 | 2 | C | B | No |
| ROT3 | 3 | D | C | No |
| ROT13 | 13 | N | M | Yes |
| ROT25 | 25 | Z | Y | No |
Only ROT13 is self-inverse. Every other rotation requires a separate decode step — shift forward to encode, shift backward to decode. That is why ROT13 dominates in practical use.
Quick reference for common shifts
| Shift | hello becomes | Common name |
|---|---|---|
| ROT1 | ifmmp | — |
| ROT3 | khoor | Classic Caesar |
| ROT13 | uryyb | Self-inverse |
| ROT25 | gdkkn | Reverse ROT1 |
ROT5: Digits Only
ROT5 applies the same rotation logic to the digits 0–9 instead of letters. Each digit shifts by 5 positions.
0 1 2 3 4
↕ ↕ ↕ ↕ ↕
5 6 7 8 9
Like ROT13, ROT5 is self-inverse: 5 + 5 = 10 wraps back around. Combining ROT13 on letters and ROT5 on digits produces ROT18 — a cipher that shifts both characters and numbers.
def rot5(text):
result = []
for char in text:
if '0' <= char <= '9':
result.append(chr((ord(char) - ord('0') + 5) % 10 + ord('0')))
else:
result.append(char)
return ''.join(result)
rot5('Code 42') # 'Code 97'
ROT47: Full ASCII Range
ROT47 shifts printable ASCII characters (codes 33–126) by 47 positions. It covers letters, digits, punctuation, and symbols — making it more versatile than ROT13 for obscuring technical content.
def rot47(text):
result = []
for char in text:
code = ord(char)
if 33 <= code <= 126:
result.append(chr(33 + (code - 33 + 47) % 94))
else:
result.append(char)
return ''.join(result)
rot47('Hello World!') # 'w6==@ (@C=5P'
ROT47 is also self-inverse: 47 + 47 = 94, which equals the full range of printable ASCII characters, wrapping back to the start.
ROT13 vs ROT47 comparison
| Property | ROT13 | ROT47 |
|---|---|---|
| Character set | A–Z, a–z | ASCII 33–126 |
| Self-inverse | Yes | Yes |
| Preserves spaces | Yes | No — spaces shift too |
| Preserves punctuation | Yes | No — all symbols shift |
| Security | None | None |
| Common use | Spoilers, puzzles | Obfuscating strings in code |
Atbash Cipher: Alphabet Reversal
The Atbash cipher maps each letter to its mirror position in the alphabet — A↔Z, B↔Y, C↔X, and so on.
A B C D E F G H I J K L M
↕ ↕ ↕ ↕ ↕ ↕ ↕ ↕ ↕ ↕ ↕ ↕
Z Y X W V U T S R Q P O N
Atbash is also self-inverse and is sometimes grouped with Caesar variations, though it is technically a substitution cipher with a fixed mapping rather than a rotation.
def atbash(text):
result = []
for char in text:
if 'a' <= char <= 'z':
result.append(chr(ord('z') - (ord(char) - ord('a'))))
elif 'A' <= char <= 'Z':
result.append(chr(ord('Z') - (ord(char) - ord('A'))))
else:
result.append(char)
return ''.join(result)
atbash('Hello') # 'Svool'
Decoding Unknown Shifts
When you encounter a Caesar cipher but do not know the shift, two approaches work:
Brute-force all 25 rotations
def caesar_brute(text):
for shift in range(1, 26):
decoded = []
for char in text:
if 'a' <= char <= 'z':
decoded.append(chr((ord(char) - ord('a') - shift) % 26 + ord('a')))
elif 'A' <= char <= 'Z':
decoded.append(chr((ord(char) - ord('A') - shift) % 26 + ord('A')))
else:
decoded.append(char)
print(f"ROT{shift}: {''.join(decoded)}")
Scan the output for readable English — the correct shift reveals itself immediately.
Frequency analysis
Count letter frequencies in the ciphertext and match them to known English letter frequencies. The most common ciphertext letter likely maps to E (the most common letter in English). This approach works faster on long texts where brute-force output is tedious to scan.
None of These Provide Security
Every variation discussed here is a toy cipher. They are fun for puzzles and educational for understanding substitution, but they offer zero protection against anyone who wants to read the content:
- Only 25 possible Caesar shifts — trivially brute-forced
- No secret key — the algorithm is the entire system
- Frequency analysis breaks them in seconds
- Modern computers decode any variant instantly
Use these for puzzles, spoilers, and obfuscation. Never for protecting sensitive data.
Key Takeaways
- The Caesar cipher family includes 25 rotations (ROT1–ROT25), all trivially breakable
- Only ROT13 is self-inverse — the others need a separate decode step
- ROT5 shifts digits 0–9 by 5; ROT13 + ROT5 = ROT18
- ROT47 shifts the full printable ASCII range and is also self-inverse
- Atbash mirrors the alphabet (A↔Z) and is self-inverse
- Brute-forcing all 25 rotations is the fastest decode method for unknown shifts
- None of these ciphers provide any real security — they are for puzzles and obfuscation only
Related Guides
Try It Yourself
Encode and decode any Caesar rotation instantly with our free ROT13 Tool. Paste text, choose your shift, and see the result in real time — no installation needed.