ROT13 shifts every ASCII letter forward by 13 positions in the alphabet and reverses itself when applied again, so the same operation both encodes and decodes the text. For a quick ROT13 decoder cheat sheet, the rule is that A becomes N, B becomes O, and so on through M becomes Z, and then N becomes A, O becomes B, and Z becomes M, with lowercase letters following the same 13-step pattern independently. The 26-letter Latin alphabet splits into two halves of 13, so every ASCII letter has exactly one partner, and listing those partners is the entire mapping. ROT13 only touches ASCII letters A through Z and a through z, so digits, punctuation, spaces, tabs, line breaks, accented Latin letters, CJK characters, and emoji pass through the transform untouched. Because the transform is self-inverse, applying it a second time on the result returns the original string byte-for-byte, including every preserved non-ASCII character. That property is also the answer to "how do I decode ROT13": just run the same ROT13 operation again on the encoded text. The cheat sheet below captures the alphabet mapping, the rules for non-ASCII characters, and a browser-based workflow that does this locally without uploading the input.

The ROT13 alphabet mapping at a glance
The complete ROT13 cheat sheet fits in a 13-pair table because each ASCII letter maps to one unique partner 13 places ahead, and the partner's partner is the original letter. Uppercase and lowercase are handled independently, so A pairs with N and a pairs with n, and case is never swapped. The pairs below cover every uppercase input from A to Z and are sufficient to decode any standard ROT13 string by direct table lookup.
| Input | ROT13 | Input | ROT13 |
|---|---|---|---|
| A | N | N | A |
| B | O | O | B |
| C | P | P | C |
| D | Q | Q | D |
| E | R | R | E |
| F | S | S | F |
| G | T | T | G |
| H | U | U | H |
| I | V | V | I |
| J | W | W | J |
| K | X | X | K |
| L | Y | Y | L |
| M | Z | Z | M |
The lowercase alphabet uses the same 13-pair structure one row lower in case: a pairs with n, b with o, m with z, and n with a. The mapping is the same Python rot_13 translation table described in the official Python codecs documentation, and the CPython rot_13 codec source supplies a direct alphabet cross-check, so the table above matches what every standard ROT13 implementation produces. With this one-page reference in hand, decoding ROT13 by eye becomes a matter of swapping each ASCII letter for its row partner while leaving the rest of the string untouched.
How ROT13 handles ASCII versus other characters
A common pitfall is assuming ROT13 also rotates accented letters, digits, or punctuation. It does not. The tool rotates only the two ASCII alphabets, A through Z and a through z, and preserves every other UTF-16 code unit exactly as written. The preserved group includes digits 0 through 9, punctuation, spaces, tabs, line breaks, the NUL character treated as ordinary string data, symbols, combining marks, accented Latin letters, Greek, Cyrillic, Arabic, CJK characters, and emoji.
The CPython rot_13 codec source confirms this narrow scope: the mapping is implemented as a direct table lookup on those two ASCII ranges only, with every other code unit passed through unchanged. The strict behavior shows up clearly in mixed strings. For example, "café" becomes "pnsé" because c, a, and f are ASCII letters while é is not. A combining sequence such as the letter e followed by U+0301 changes only the ASCII e and leaves the combining acute mark in place, so the diacritic still renders above the new letter. An emoji such as 🙂 stays the same UTF-16 surrogate pair because neither code unit is an ASCII letter. Digits and punctuation in a ROT13 puzzle answer also pass straight through, which is how a reader can still recognize the structure of an encoded sentence even before decoding each letter.
Decode or encode ROT13 in your browser
For longer text or anything with mixed characters, the fastest way to put the ROT13 decoder cheat sheet into practice is a local browser tool that applies the same mapping for every ASCII letter and leaves the rest alone. The ROT13 Encoder Decoder runs entirely in the current browser tab, so the input, the output, and any clipboard content are never uploaded. To decode a ROT13 string, paste it and apply the same ROT13 button again.
- Paste the text into the input area. The mix can include any combination of ASCII letters, digits, punctuation, whitespace, accented characters, or emoji.
- Select Apply ROT13 to run the transform. The tool reports the rotated output alongside a count of the ASCII letters that actually changed.
- Read the result. If the source was already ROT13-encoded text, the output is the decoded original; if the source was plain text, the output is the encoded form.
- Copy the result to the clipboard, or paste the new output back into the input and apply ROT13 a second time to confirm the operation is self-inverse.
The input limit is 1,000,000 UTF-16 code units, which means a string at the exact boundary is accepted and transformed in full while one code unit past that boundary is rejected with an explicit message; nothing is sliced, sampled, shortened, or silently capped. Editing the source immediately removes the previous result and any error or copy status, so a stale decoded value cannot linger on screen. Clipboard writes are asynchronous, so the tool uses generation identifiers to keep older pending completions from publishing stale status, and if clipboard access is denied the read-only output remains available for manual selection.
Worked example: decoding a short phrase
To see the cheat sheet in action, decode the ROT13 string "PELCGB" into a real word. Walk through each character, look up its pair in the table, and write the partner letter in the same case.
- P → C, because P is the 16th letter and its 13-step partner is C.
- E → R, because E is the 5th letter and adding 13 lands on R.
- L → Y, because L plus 13 wraps to Y in the 26-letter cycle.
- C → P, which mirrors the first step and shows why the mapping forms pairs.
- G → T, because G plus 13 wraps to T.
- B → O, because B plus 13 lands on O.
Reading the partners in order spells CRYPTO, which is the original plaintext. Because ROT13 is self-inverse, running the same operation on CRYPTO returns PELCGB. The decoded phrase and the encoded phrase are interchangeable: each is the result of one ROT13 pass on the other, and a third pass flips the text back to the ROT13 form, because every odd-numbered pass produces the encoded string and every even-numbered pass returns the original. That round-trip behavior is the cleanest confirmation that the mapping was applied correctly.
What ROT13 does not do
ROT13 is a public substitution cipher, not a security primitive. It has no key, every implementation uses the same fixed 13-step shift, and anyone who recognizes ROT13 can reverse it by applying the same operation again. For that reason it should never be used to protect passwords, tokens, personal information, private messages, or production configuration. The Python codecs documentation describes rot_13 simply as a string-to-string text transform, and RFC 1855 records its historical role on early Internet forums as a way to obscure spoilers or material a reader might prefer not to see accidentally. That is casual reversible obfuscation, not confidentiality, authentication, integrity protection, hashing, or access control.
The tool also deliberately does not implement related transforms. It does not perform arbitrary Caesar shifts, ROT5 for digits, ROT18, ROT47, Unicode transliteration, language-aware substitution, compression, or encryption. When an arbitrary ASCII shift is needed, the Caesar Cipher Decoder accepts a configurable shift while preserving case, punctuation, numbers, and non-ASCII text. When real confidentiality is required, an audited encryption system is the right tool, not ROT13. Keeping that boundary in mind is what turns ROT13 from a misleading security claim into the harmless text trick it was designed to be.
Quick reference: ROT13 cheat sheet rules
The full cheat sheet reduces to a small number of rules that hold for every supported input, regardless of length. The rules below summarize what the table and the worked example show in one place, so they can be checked at a glance while decoding or encoding a phrase.
- Uppercase A through Z rotates within the uppercase range, and lowercase a through z rotates within the lowercase range; case is never swapped.
- The 26-letter mapping splits into 13 pairs, so the partner of the partner is always the original letter.
- Applying the transform twice returns the exact original string, including every preserved non-ASCII character.
- Every character outside ASCII A–Z and a–z, including digits, punctuation, spaces, accents, CJK characters, and emoji, is preserved unchanged.
- The output length in UTF-16 code units always equals the input length, because each transformed ASCII letter is replaced by exactly one ASCII letter.
With the alphabet table, the non-ASCII rules, and the self-inverse property in hand, any ROT13 string can be decoded by reading pairs from the table or by running the same operation through a local browser tool. That combination is the entire ROT13 decoder cheat sheet: a 13-pair mapping, a strict ASCII scope, and the guarantee that one extra pass brings the text back home.
For a deeper look, see How to Document the Steps to Use a ROT47 Encoder Decoder.
For a deeper look, see UTF-8 Encoder / Decoder Alternative: Strict, Local, Fatal.