Conceito

Código poligrâmico criado pelo historiador grego Políbio (204 a.C. a 122 a.C.), onde a idéia inicial foi substituir cada letra com um par de números cujos algarismos estão compreendidos entre 1 e 5. A base para a substituição é dada por uma tabela de 5x5, iniciando assim um tipo de processo criptografico, técnica onde uma informação pode ser transformada da sua forma original para outra forma ilegível.

      |  1  |  2  |  3  |  4  |  5  |
|-----------------------------|
| 1 | A | B | C | D | E |
| 2 | F | G | H | I | J |
| 3 | K/Q | L | M | N | O |
| 4 | P | R | S | T | U |
| 5 | V | W | X | Y | Z |
|-----------------------------|

O código de Políbio se baseia na decomposição da mensagem em letras individuais, permitindo transmitir qualquer tipo de mensagem.

Cada letra é representada pela combinação dos dois números que correspondem à posição ocupada pela letra. Assim, A é substituído por 11, B por 12 e assim por diante.

O código de Políbio tem algumas características importantes: utilização reduzida, com cinco números como grupo de cifrantes, a conversão em números,  a transformação de um símbolo em duas partes que podem ser usadas separadamente.



Implementação

Abaixo uma amostra da pequena aplicação que iremos criar para que a cifragem do código de políibio seja possível. Deixando claro aqui, que o exemplo mostrará uma aplicação sem grandes complicações para construção focando estudantes de Computação onde uma vez por outra recebem exercicios de criptografia, geralmente do tipo para desenvolver.

Figura 1. Tela da Aplicação

No Delphi, iniciamos no Menu File->New->Application.

Em seguida, colocamos dois componentes Label e dois Button e duas Edit, todos localizados na Tool palette guia Standard.

Na seção Var do formulário criamos ainda uma váriavel chamada Polibio, com isso a variável se torna global ficando disponível para qualquer unit que estiver com a unit da variável em sua declaração no uses.

Após posicionalos como desejado ou como mostra a Figura 1, Clique agora na Edit1 e em Eventos clique duplo no evento OnKeyPress digite o código abaixo:

Listagem 1:

case AnsiIndexStr(UpperCase(key), ['A','B','C','D','E','F','G','H','I','J','L','M','N','O','P','Q','R','S','T','U','V','X','Z','K','W','Y']) of
    0 : Polibio  := polibio + '11';
    1 : Polibio  := polibio + '12';
    2 : Polibio  := polibio + '13';
    3 : Polibio  := polibio + '14';
    4 : Polibio  := polibio + '15';
    5 : Polibio  := polibio + '21';
    6 : Polibio  := polibio + '22';
    7 : Polibio  := polibio + '23';
    8 : Polibio  := polibio + '24';
    9 : Polibio  := polibio + '25';
    10 : Polibio := polibio + '32';
    11 : Polibio := polibio + '33';
    12 : Polibio := polibio + '34';
    13 : Polibio := polibio + '35';
    14 : Polibio := polibio + '41';
    15 : Polibio := polibio + '31';
    16 : Polibio := polibio + '42';
    17 : Polibio := polibio + '43';
    18 : Polibio := polibio + '44';
    19 : Polibio := polibio + '45';
    20 : Polibio := polibio + '51';
    21 : Polibio := polibio + '53';
    22 : Polibio := polibio + '31';
    23 : Polibio := polibio + '55';
    24 : Polibio := polibio + '52';
    25 : Polibio := polibio + '54';
  end;

DevMan: OnKeyPress executa um evento associado quando uma tecla é pressionada e solta. a varável Key é a tecla pressionada convertida pra maiscula com a função UpperCase. A função AnsiIndexStr verifica se qualquer uma das strings em StringList corresponder exatamente a string de origem.

Agora clique no Button1, com propriedade Caption Calcular e no Evento OnClick Escreva o código abaixo:

Listagem 2:

 Edit2.Clear; // Limpa a segunda edit, caso ela contenha uma cifragem anterior
 if Edit1.Text <> '' then
   begin
     Edit2.Text := polibio;
     polibio := '';
   end;

No botão limpar, basta apenas colocar um Clear para as edit's ficarem sem texto novamente.

Pronto, com isso o sistema converterá os caracteres alfa em números da tabela 5x5 do código de Políbio.

Este exemplo é ilustrativo, podendo ser feito de outras maneiras. A mais simples que consegui em Dephi foi essa. Um braço a todos e bons estudos. Qualquer dúvida/sugestão é só comentar. Fica também a possibilidade de fazer o inverso.

Abraço a Todos.