ADFGVX Cipher

Substitution square
ADFGVX
ASECRTA
DBDFGHI
FJKLMNO
GPQUVWX
VYZ0123
X456789
AFVVXXXVXAAAVAVFVFGVDGFAAAVF
Transformed locally in your browser. The square keyword seeds a mixed 6×6 square holding all 36 symbols A–Z and 0–9 (no I/J merge), with rows and columns labelled A, D, F, G, V, X. The message is normalized to uppercase A–Z and 0–9 — spaces, case, and punctuation are dropped — then each symbol becomes its two coordinate labels and the result is columnar-transposed by the transposition keyword. Output is always uppercase ADFGVX text, so a decode returns uppercase letters and digits only and does not recover your original spacing or case.

Encode through a square then a transposition

ADFGVX was a German field cipher from World War I. Each plaintext symbol is replaced by its row and column labels in the keyed square — fractionation — and the resulting ADFGVX letters are then scrambled by a keyword columnar transposition. Splitting each symbol across two stages is what made the cipher hard to break in 1918.

When to use this tool

Reach for the ADFGVX cipher when a CTF challenge, puzzle, escape room, or cryptography lesson involves the famous World War I German field cipher. Introduced in 1918, it pairs a Polybius-style 6×6 fractionation square — holding all 26 letters and 10 digits — with a keyword columnar transposition, so a single substitution square is no longer enough to read the message. It sits naturally beside the Bifid, Trifid, Polybius Square, and Columnar Transposition tools, rounding out the fractionation-plus-transposition family of classical ciphers here.

Privacy and limitations

Everything runs locally in your browser; nothing is sent anywhere. This is a classical cipher, not real encryption — both known keywords make it straightforward to reverse. The square keyword seeds a mixed 6×6 square of A–Z and 0–9 (no I/J merge), and the transposition keyword needs at least two letters or the output is held back with an inline warning. Encoding is case-insensitive and drops every character outside A–Z and 0–9 before fractionating, so spaces, punctuation, and case are not preserved — a decode returns uppercase letters and digits only rather than your exact input. Use the encode/decode toggle to switch directions, since the transform is not self-inverse.