XOR com chave repetida
Uma chave de vários bytes repetida ao longo da mensagem, como a Vigenère, só que com bytes.
O XOR de um byte usa o mesmo número em todos os bytes e cai com 256 tentativas. A versão "melhorada" usa uma chave de vários bytes, repetida do começo ao fim: o 1º byte da mensagem faz XOR com o 1º byte da chave, o 2º com o 2º, e quando a chave acaba ela recomeça. É a Vigenère, só que com bytes em vez de letras.
Com uma chave de 8 bytes há 256⁸ (cerca de 1,8 × 10¹⁹) chaves possíveis, e testar todas deixa de ser viável. Mas o ponto fraco da Vigenère continua aqui: a chave se repete. E basta conhecer tantos bytes do original quanto o tamanho da chave para tirá-la inteira (veja o conceito Ataque de texto conhecido).
Onde arranjar bytes conhecidos? Nos arquivos. Cada tipo de arquivo começa com uma assinatura fixa (veja o conceito Assinatura de arquivo). Um ZIP começa sempre com 50 4B 03 04. Se um ZIP foi cifrado com a chave sol:
cifrado: 23 24 6f 77
assinatura: 50 4b 03 04 (todo ZIP começa assim)
XOR: 73 6f 6c 73 = s o l s
Quatro bytes conhecidos deram sols: a chave tem 3 letras, sol, e recomeçou no quarto byte. Quando o resultado mostra um trecho que se repete, você achou o tamanho da chave.
No CyberChef, a operação XOR aceita a chave em formato Hex (para bytes, como uma assinatura) ou UTF8 (para uma senha em texto) e já repete a chave sozinha. Take bytes recorta só o começo do arquivo, e Render Image mostra o resultado quando ele é uma imagem. Em Python: bytes(b ^ chave[i % len(chave)] for i, b in enumerate(dados)).