Repeating-key XOR

From the Buttcrack Cipher Wiki — the free field guide to classical ciphers

Repeating-key XOR — A repeating byte key, XORed across the message. Vigenere over bytes.

XOR with a repeating byte key. Key length from normalised Hamming distance, then per-byte frequency analysis.

A worked example§

Encrypting a sample with the cipher itself, at build time:

MEET ME BY THE OLD CLOCK TOWER AT DAWN

Key: KEY

produces the ciphertext

06001c1f65140e651b12650d03007904091d6b06150406126b11161c000b6b040d6b01181c0b

This example is generated by running the cipher when the page is built, and the round trip is checked, so it always matches what the solver does.

How it is broken§

Key length from normalised Hamming distance between blocks, then each key byte by frequency analysis of its coset.

History and context§

The cipher behind a long line of broken products, and still the answer when a vendor says the data is 'encrypted' without naming an algorithm.

See also§

Single-byte XOR

Browse every cipher in the Byte-level ciphers family, read the history of codebreaking, or return to the wiki main page.

Frequently asked questions§

How is the Repeating-key XOR broken?

Key length from normalised Hamming distance between blocks, then each key byte by frequency analysis of its coset.

What key does the Repeating-key XOR use?

byte string. The keyspace is unbounded in practice.

How much ciphertext do I need?

At least 16 characters for this solver to attempt it; short messages can be readable and still not be proof.

Can I break a Repeating-key XOR on this page?

Not with the browser build, which targets the common puzzle families. The desktop version searches it: see the Windows app page.

The facts in this article are generated from buttcrack's cipher registry when the site is built, so they describe the implementation you can run on this page. Registry-generated content is checked against the code; the history is editorial.

Try it live — break a real puzzle

Private by design

Drop in a puzzle. Leave with an answer.

Runs on this device
Try a sample
What this browser solver can—and cannot—do

It tries: Caesar, Atbash, ROT13, affine, Trithemius, rail fence, single-byte XOR, periodic Vigenère-family ciphers, autokey, selected encoding layers (such as Base64, hex, binary, decimal ASCII, Morse, and reverse), and—only with 60+ A–Z letters—statistical substitution.

It does not: prove a decryption, cover every classical cipher, or break modern encryption such as AES or RSA. Its ranking model is tuned for English, so a high score is a lead to verify with the method, key, and source context—not a guarantee.

Short text, non-English plaintext, non-Latin or symbol alphabets, missing keys, and unsupported formats can all leave no high-confidence answer. When that happens, the result includes input-specific observations and suggested next checks; those observations are not a claim to know the exact cause.

No account. No upload. No stored text. The complete solver runs in your browser.

This tool is free and has no account, no upload, no tracking of your text

Everything runs in your browser. If it saved you time, keeping it alive costs nothing but a click.