Methodology
Which standards CipherPad follows
Every translator here makes choices: which variant of a cipher to implement, what to do with a character that has no equivalent, whether to preserve case. Most tools make those choices silently. This page writes them down.
Last updated: 15 October 2026
Why this page exists
If you decode a message here and get a different answer from another site, one of two things has happened: one implementation is wrong, or the two implement different variants. The second is far more common, and it is impossible to tell which without knowing what each tool actually does. So this page states, for each translator, which standard or variant is implemented and how the awkward cases are handled.
The descriptions below were read off the implementation, not written from intention. Where something is a deliberate simplification, it says so. Where a variant is not supported, it says that too, rather than leaving you to discover it from a wrong answer.
Standards and edge cases by translator
| Translator | What is implemented | Edge cases and what is not supported |
|---|---|---|
| Morse code | International Morse code: letters A to Z, digits 0 to 9 and common punctuation. Letters are separated by a space and words by a forward slash. | Characters with no Morse equivalent are dropped silently rather than passed through, so the output is always valid Morse. Case is ignored: Morse has no capitals. Accented letters are not mapped and are therefore dropped. |
| Binary | Binary of the character's Unicode code point, padded to at least eight bits, with one group per character separated by a space. For ordinary English text this is exactly 8-bit ASCII. | Characters above code point 255, such as an emoji or an accented letter outside Latin-1, produce a group longer than eight bits rather than being dropped. When decoding, each whitespace-separated group is read as a binary number whatever its length, so a 4-bit group decodes to a low control character instead of being rejected. Check your grouping if the output looks like nothing at all. |
| Braille | Unicode braille patterns (U+2800 to U+28FF), Grade 1 (uncontracted) only. Digits are written with the number sign followed by the letters A to J, which is the standard braille convention. | Grade 2 contracted braille is not implemented. Grade 2 replaces common words and letter groups with single cells and is a different system, so a Grade 1 tool that claimed to do Grade 2 would produce wrong output. Characters with no braille cell are passed through unchanged rather than dropped. |
| Base64 | Standard Base64 as used in email and on the web, over the UTF-8 bytes of the input, with = padding. | URL-safe Base64, which uses - and _ in place of + and /, is not produced. Input that is not valid Base64 returns empty rather than a partial decode. |
| Caesar, ROT13, Atbash | Substitution over the 26-letter English alphabet. Letter case is preserved. ROT13 is a Caesar cipher fixed at shift 13; Atbash maps A to Z, B to Y and so on. | Digits, punctuation, spaces and any non-Latin character pass through untouched. This is the usual convention and it is what makes the ciphers readable, but it does leak the shape of the message. |
| Vigenere | Classical Vigenere over the 26-letter alphabet. The key repeats across the message, and only letters advance the key position. | Non-letters in the message pass through and do not consume a key letter. Non-letters in the key are ignored. An empty key returns the message unchanged rather than throwing. |
| Polybius square and tap code | The traditional 5x5 grid holding 25 letters, with I and J sharing one cell. Coordinates are given as row then column. | The 6x6 variant that adds the digits 0 to 9 is not implemented. Because I and J share a cell, decoding always returns I: that loss is inherent to the 5x5 grid, not a defect here. |
| Playfair | Classical Playfair on a 5x5 key square built from the keyword, with I and J merged. X is inserted between doubled letters and appended to pad an odd final letter, and Z is used instead where the letter being separated is itself an X. | The variant that merges Q instead of J is not implemented. Decoded text keeps its padding letters, since removing them automatically would sometimes delete a real one. |
| Bacon cipher | The 26-letter variant, in which every letter from A to Z has its own five-symbol code (A is AAAAA through Z is BBAAB), written as groups of five A and B symbols. | Bacon's original 24-letter alphabet, where I and J share a code and U and V share a code, is not implemented. Codes from a 24-letter table will therefore disagree with this tool from the letter I onwards, which is the single most common source of confusion with this cipher. The steganographic layer, where the A and B pattern is hidden in two typefaces, is out of scope for a plain-text tool. |
| Affine | y = (ax + b) mod 26, where a must be coprime with 26. Only the 12 valid values of a are offered, which is a mathematical requirement and not a preference. | Values of a that share a factor with 26 are not selectable, because the cipher would not be reversible: two letters would encipher to the same result. |
| NATO phonetic alphabet | The NATO and ICAO spelling alphabet, using the official spellings Alfa and Juliett rather than the everyday Alpha and Juliet. Digits are spelled out as Zero through Nine. | The aviation pronunciation forms, such as niner for nine and tree for three, are not used: the plain English number words are. Characters with no code word are dropped. |
Test vectors, computed by the engine
Each row below is the worked example a translator opens with, run through the same engine function the translator uses, with the key a fresh translator starts with. The table is generated when the site is built, so nothing in it is typed by hand: if an engine changed, this table would change with it. The last column runs the output back through the decoder to show whether the round trip is exact.
| Translator | Key | Input | Output | Decodes back |
|---|---|---|---|---|
| Morse Code | None | SOS | ... --- ... | Same letters: sos (case or spacing differs) |
| Binary Code | None | Hi | 01001000 01101001 | Exact |
| Text to Binary | None | Hello | 01001000 01100101 01101100 01101100 01101111 | One-way tool |
| Binary to Text | None | 01001000 01101001 | Hi | One-way tool |
| Braille | None | cat | ⠉⠁⠞ | Exact |
| Caesar Cipher | Shift 3 | Attack at dawn | Dwwdfn dw gdzq | Exact |
| ROT13 | None | Spoiler ahead | Fcbvyre nurnq | Exact |
| Atbash Cipher | None | Hello | Svool | Exact |
| Vigenere Cipher | Keyword KEY | Meet me at noon | Wicd qc kx lysl | Exact |
| Pig Latin | None | hello world | ellohay orldway | One-way tool |
| Leetspeak (1337) | None | elite hacker | 31173 h4ck3r | Lossy: eiite hacker |
| A1Z26 | None | cab | 3-1-2 | Exact |
| Tap Code | None | water | ..... .. . . .... .... . ..... .... .. | Exact |
| NATO Phonetic Alphabet | None | ACME | Alfa Charlie Mike Echo | Same letters: acme (case or spacing differs) |
| Base64 Text | None | CipherPad | Q2lwaGVyUGFk | Exact |
| Pigpen Cipher | None | SECRET | Exact | |
| Playfair Cipher | Keyword KEY | Attack at dawn | BS SB IC BS GE XM | Same letters: ATTACKATDAWN (case or spacing differs) |
| Rail Fence Cipher | 3 rails | Meet me at midnight | M aigetm tmdihee nt | Exact |
| Bacon Cipher | None | Meet me at noon | ABBAA AABAA AABAA BAABB / ABBAA AABAA / AAAAA BAABB / ABBAB ABBBA ABBBA ABBAB | Same letters: meet me at noon (case or spacing differs) |
| Affine Cipher | a = 5, b = 8 | Cryptography is fun | Spyfzampifry wu hev | Exact |
| Polybius Square | None | Secret meeting | 43 15 13 42 15 44 / 32 15 15 44 24 33 22 | Same letters: secret meeting (case or spacing differs) |
The leetspeak row is lossy by design, not by accident: 1 stands for both i and l, and the decoder reads it as i. No decoder can know which letter was meant, so it picks one and says so here.
How the code breakers score keys
The Caesar Cipher, Affine Cipher, Rail Fence Cipher and Vigenere Cipher translators can recover the key from the ciphertext alone. Each one searches the possible keys, scores the decoded text, and shows the best candidates with their score and what the score measures. Two rules keep the result honest:
- A minimum length.Below a minimum number of letters the right key stops winning reliably, so a shorter text gets "not enough text" instead of a winner. The minimums below were measured on English test sentences enciphered by the engine.
- Two signals before "Solved". A candidate is only marked as solved when the statistic the keys were ranked by and a second, independent check agree. Keys ranked by letter frequency must also read as English letter order, and keys ranked by readability must also have English letter frequencies.
Two measures are used. Chi-squared compares the decoded letter frequencies with English (lower is better), which works for ciphers that replace letters. Rail fence only reorders letters, so its letter frequencies are identical for every key and cannot rank them: it is ranked by a readability heuristic instead, which counts common English letter pairs, letter triples and common words (roughly 0 to 100, higher is better). That heuristic is a rule of thumb built into the code, not a published dataset. Only the first 2,000 characters of a message are scored; statistics settle long before that.
The table runs each code breaker on its translator's longer worked example, enciphered with the default key, at build time.
| Cipher | Method | Minimum | Test ciphertext | Best candidate |
|---|---|---|---|---|
| Caesar Cipher | All 25 shifts, ranked by chi-squared against English letter frequencies. Lower is better. | 20 letters | Dwwdfn dw gdzq iurp wkh qruwk vlgh ri wkh ulyhu | Shift 3 (chi-squared 0.39, lower is better). Decodes the example exactly, marked Solved. |
| Affine Cipher | All 312 keys (12 multipliers times 26 offsets), ranked by chi-squared against English letter frequencies. Lower is better. | 40 letters | Spyfzampifry wu hev orcv cjcpy lczzcp ah zrc qcuuimc qajcu za i vco flisc | a = 5, b = 8 (chi-squared 0.33, lower is better). Decodes the example exactly, marked Solved. |
| Rail Fence Cipher | Every rail count from 2 to 10, ranked by a readability heuristic (common English letter groups and words). Higher is better. Rail fence only reorders letters, so letter frequencies cannot tell the keys apart. | 30 letters | M aigbhll eetsietm tmdih yteodcoktwrna h ttoee nt co rean | 3 rails (readability 69 of 100, higher is better). Decodes the example exactly, marked Solved. |
| Vigenere Cipher | Key lengths 1 to 12 tried (index of coincidence favours length 9, Kasiski repeats favour 3). Each key letter is solved by letter frequency, then keys are ranked by a readability heuristic (common English letter groups and words). Higher is better. | 60 letters | Wicd qc kx lysl lc rri mvh qdslo fpsheo, eln fpsre dlc wen krb dlc veldipx agdl wyy | Keyword KEY (readability 81 of 100, higher is better). Decodes the example exactly, marked Solved. |
How these numbers are checked
Two automated checks run against the code before a change ships. The test suite (npm test) enciphers English test sentences with known keys and fails unless each code breaker puts the right key first, is never marked solved on a wrong key, and answers "not enough text" below its minimum. It also checks that the homepage turns one word into all 21 outputs and decodes Caesar, Atbash, ROT13, Morse and binary test messages back to the plain text. The post-build check (npm run verify) recomputes every test vector and code breaker result on this page from the engine and fails the build if the page shows anything else.
Rules that apply everywhere
- Nothing is uploaded. Every translator runs in your browser. See the privacy policy for how to verify that in the Network tab.
- Unsupported characters are handled predictably, not silently corrected. Each translator either drops a character it cannot map or passes it through unchanged, and the table above says which. Neither behaviour is universally right, so the rule is to be consistent and to document it.
- Nothing here is secure. Every scheme on this site is an encoding or a broken historical cipher. Each translator carries a permanent notice explaining which of the two it is. For real protection, use vetted modern cryptography such as the Web Crypto API.
- Encoding and encryption are kept apart. Morse, binary, braille, Base64, NATO and A1Z26 are encodings: public, keyless and concealing nothing. Only the schemes grouped as ciphers attempt concealment, and all of them fail at it.
When this changes
If a translator's behaviour changes, this page and the changelog are updated in the same change. If you find a case where the behaviour here does not match the table above, that is a bug worth reporting through the contact page.