Como melhorar programaticamente as cifras de substituição de quebra?

Eu escrevi (estou escrevendo) um programa para analisar texto criptografado e tentar analisá-lo e quebrá-lo usando a análise de frequência.

O texto criptografado assume a forma de cada letra sendo substituída por outra letra, ou seja. a-> m, b-> z, c-> t etc etc. todos os espaços e caracteres não alfabéticos são removidos e as letras maiúsculas são minúsculas.

Um exemplo seria:

Entrada original - este exemplo de mensagem contém apenas os marcadores inferiores
Saída criptografada - ziololqlqdhstdtllqutozgfsnegfzqoflsgvtkeqltstzztkl
Tentativa de quebrar - omieieaeanuhtnteeawtiorshylrsoaisehrctdlaethtootde

Aqui só tenho I, A e Y corretamente.

Atualmente, meu programa o quebra analisando a frequência de cada caractere individual e mapeando-o para o caractere que aparece na mesma classificação de frequência em um texto não criptografado.

Estou procurando métodos e maneiras de melhorar a precisão do meu programa, pois no momento não entendo muitos caracteres. Por exemplo, ao tentar decifrar uma quantidade X de caracteres de Orgulho e Preconceito, recebo:

1600 - 10 letras corretas
800 - 7 letras corretas
400 - 2 letras corretas
200 - 3 letras corretas
100 - 3 letras corretas.

Estou usando Romeu e Julieta como base para obter os dados de frequência.

Foi-me sugerido olhar e usar a frequência dos pares de caracteres, mas não tenho certeza de como usar isso, porque, a menos que esteja usando textos criptografados muito grandes, posso imaginar uma abordagem semelhante à maneira como estou apresentando caracteres únicos. mais imprecisos e causam mais erros do que sucessos. Espero também tornar meu cracker de criptografia mais preciso para 'entradas' mais curtas.

questionAnswers(10)

yourAnswerToTheQuestion