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

What each translator implements, and what it does with characters it cannot map
TranslatorWhat is implementedEdge cases and what is not supported
Morse codeInternational 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.
BinaryBinary 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.
BrailleUnicode 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.
Base64Standard 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, AtbashSubstitution 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.
VigenereClassical 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 codeThe 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.
PlayfairClassical 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 cipherThe 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.
Affiney = (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 alphabetThe 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.

One test vector per translator, with the default key
TranslatorKeyInputOutputDecodes back
Morse CodeNoneSOS... --- ...Same letters: sos (case or spacing differs)
Binary CodeNoneHi01001000 01101001Exact
Text to BinaryNoneHello01001000 01100101 01101100 01101100 01101111One-way tool
Binary to TextNone01001000 01101001HiOne-way tool
BrailleNonecat⠉⠁⠞Exact
Caesar CipherShift 3Attack at dawnDwwdfn dw gdzqExact
ROT13NoneSpoiler aheadFcbvyre nurnqExact
Atbash CipherNoneHelloSvoolExact
Vigenere CipherKeyword KEYMeet me at noonWicd qc kx lyslExact
Pig LatinNonehello worldellohay orldwayOne-way tool
Leetspeak (1337)Noneelite hacker31173 h4ck3rLossy: eiite hacker
A1Z26Nonecab3-1-2Exact
Tap CodeNonewater..... .. . . .... .... . ..... .... ..Exact
NATO Phonetic AlphabetNoneACMEAlfa Charlie Mike EchoSame letters: acme (case or spacing differs)
Base64 TextNoneCipherPadQ2lwaGVyUGFkExact
Pigpen CipherNoneSECRETExact
Playfair CipherKeyword KEYAttack at dawnBS SB IC BS GE XMSame letters: ATTACKATDAWN (case or spacing differs)
Rail Fence Cipher3 railsMeet me at midnightM aigetm tmdihee ntExact
Bacon CipherNoneMeet me at noonABBAA AABAA AABAA BAABB / ABBAA AABAA / AAAAA BAABB / ABBAB ABBBA ABBBA ABBABSame letters: meet me at noon (case or spacing differs)
Affine Ciphera = 5, b = 8Cryptography is funSpyfzampifry wu hevExact
Polybius SquareNoneSecret meeting43 15 13 42 15 44 / 32 15 15 44 24 33 22Same 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.

Code breakers: method, minimum length and a test run
CipherMethodMinimumTest ciphertextBest candidate
Caesar CipherAll 25 shifts, ranked by chi-squared against English letter frequencies. Lower is better.20 lettersDwwdfn dw gdzq iurp wkh qruwk vlgh ri wkh ulyhuShift 3 (chi-squared 0.39, lower is better). Decodes the example exactly, marked Solved.
Affine CipherAll 312 keys (12 multipliers times 26 offsets), ranked by chi-squared against English letter frequencies. Lower is better.40 lettersSpyfzampifry wu hev orcv cjcpy lczzcp ah zrc qcuuimc qajcu za i vco flisca = 5, b = 8 (chi-squared 0.33, lower is better). Decodes the example exactly, marked Solved.
Rail Fence CipherEvery 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 lettersM aigbhll eetsietm tmdih yteodcoktwrna h ttoee nt co rean3 rails (readability 69 of 100, higher is better). Decodes the example exactly, marked Solved.
Vigenere CipherKey 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 lettersWicd qc kx lysl lc rri mvh qdslo fpsheo, eln fpsre dlc wen krb dlc veldipx agdl wyyKeyword 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.