Criptografando mensagens com PHP

Ensina um meio de criptografar mensagens, ou seja, de escrever mensagens em códigos, por meio de um algoritmo utilizando Teoria dos Números. Útil para criptografar senhas de sites e enviar mensagens secretas para amigos(as). Pode ser aplicado em qualquer outra linguagem de programação.

[ Hits: 67.768 ]

Por: Laudelino em 05/04/2005


Iniciando com o PHP



Iremos trabalhar utilizando um conjunto Zn={0, 1, 2, ..., n}, mais especificamente com o:

Z27={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26},

pois este conjunto contém 27 elementos, a mesma quantidade de símbolos do nosso alfabeto "A".

A soma, subtração e a multiplicação em Z27 são diferentes do que conhecemos usualmente. Vamos a uma explicação grosseira. Se a soma ou multiplicação der superior a 26, então vá diminuindo 27 até que o número esteja entre 0 e 26. Se a subtração der menor do que 0, então some 27 até que o número esteja entre 0 e 26. Caso a soma, subtração ou multiplicação fique entre 0 e 26, então não há o que fazer, é igual ao que conhecemos usualmente.

Exemplo 1: 7 + 24 = 31 que é maior que 26, então 31 em Z27 é equivalente a 31 - 27 = 4, ou seja, em Z27, 7 + 24 = 4. Estranho mas é isso mesmo.

Exemplo 2: 3 * 25 = 75 que é maior que 26, então 75 - 27 = 48, que ainda é maior que 26. Então, 48 - 27 = 21. Logo, em Z27, 3 * 25 = 21.

Exemplo 3: 7 - 23 = -16 que é menor que 26, então -16 + 27 = 11. Logo, em Z27, 7 - 23 = 11.

Exemplo 4: 7 + 10 = 17 que está entre 0 e 26, então 7 + 10 = 17 em Z27.

Pronto, agora vamos implementar o que foi dito acima em PHP:

// (início) Z_n
function Z_n($x) {

$n = 27; // configura o n. Se $n = 27, então estamos trabalhando com o Z_27.

  if ($x >= $n) { // verifica se o valor é maior que 26, se sim, então subtrai 27 até que o valor fique entre 0 e 26. em seguida, exibe o valor em Z_27.
    while ($x >= $n) {
     $x = $x - $n;
    }
    return $x;
  }

  elseif ($x < 0) { // caso o número não seja maior que 26, então verifica se o valor é menor que 0, se sim, soma 27 até que o valor fique entre 0 e 26. em seguida, exibe o valor em Z_27.
   while ($x < 0) {
    $x = $x + $n;
    return $x;
   }
  }
  
  else { // se o valor não for nem maior que 26 nem menor que 0, ou seja, estiver entre 0 e 26, então não há problema e o valor é exibido.
   return $x;
  }
}
// (fim) Z_n

Teste os exemplos 1, 2, 3 e 4 colocando o código abaixo no mesmo arquivo em que você colocou a função Z_n acima:

Exemplo 1: <? echo "7 + 24 = ".Z_n(7+ 24)."."; ?>
Exemplo 2: <? echo "3 * 25 = ".Z_n(3*25)."."; ?>
Exemplo 3: <? echo "7 - 23= ".Z_n(7-23)."."; ?>
Exemplo 4: <? echo "7 + 10= ".Z_n(7-23)."."; ?>

Dica 1: Crie novos exemplos.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Conceitos básicos
   3. Iniciando com o PHP
   4. Implementando o cripto-sistema
   5. Criptografando
   6. criptografia.php
   7. Descriptografando uma mensagem
   8. Adicionando símbolos no alfabeto
   9. Considerações finais e referências
Outros artigos deste autor

Programando PostgreSQL + PHP

PostgreSQL: comandos básicos

Método de Newton e PHP

Leitura recomendada

Instalações PHP não seguras

Criptografia do método GET no PHP

Segurança: Autenticando o PHP com HTTP (Authentication Required)

Vulnerabilidade em formulário PHP

Autenticação de sites com PHP e MySQL

  
Comentários
[1] Comentário enviado por kimmay em 06/04/2005 - 15:11h

Muito bom mano..

parabiensss...

[2] Comentário enviado por pacoca em 06/04/2005 - 17:34h

quero deixar meus parabens ao artigo descrito acima, se tinha alguma dúvida sobre.... elas acabaram.
São artigos desse nível que faz com que o vol seja o que é hoje, ponto de referencia para profissionais da área ensinarem e aprenderem cada vez mais.

[3] Comentário enviado por WhiteFox em 06/04/2005 - 21:28h

Muito bom seu Artigo!

Haveria a possiilidade de colocar o [espaço] no script ? Como ?

Obrigado e Parabéns!

[4] Comentário enviado por djrosario em 17/03/2006 - 14:21h

Não entendi como a função g(x) é a inversa de f(x), se um pressuposto para isto é que ela deve satisfazer a condição f(g(x))=x e isto não se verifica nas funções apresentadas no artigo?

[5] Comentário enviado por removido em 24/04/2006 - 18:09h

Muito válido esse seu artigo, gosto da área de criptografia, está sendo muito válido para meu apredizado, parabéns.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts