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.853 ]

Por: Laudelino em 05/04/2005


Implementando o cripto-sistema



Iremos começar o trabalho árduo para criptografar. Vamos ver os passos a serem tomados para criptografar uma mensagem, depois implementaremos o que foi dito em PHP.

Primeiro, associamos cada símbolo do nosso alfabeto "A" a um valor numérico em Z27.

A=0, B=1, C=2, D=3, ..., Y=24, Z=25 e _=27.

Em seguida, escrevemos uma mensagem no texto original:

A_MATEMATICA_EH_LINDA.

Depois, aplicamos a função Cripto-Sistema em cada símbolo do nosso alfabeto, para o símbolo A aplicamos a função Cripto-Sistema no 0, para o símbolo B aplicamos a função Cripto-Sistema no 1 etc. A mensagem "A_MATEMATICA_EH_LINDA" fica assim:

f(0)=9, f(26)=23, f(12)=3, f(0)=9, ..., f(13)=16, f(3)=21 e f(0)=9.

Relacionamos os valores obtidos após a aplicação da função Cripto-Sistema, com os símbolos do alfabeto A, e, desta forma, obtemos a mensagem-cifrada:

JXDJNHDJNFIJXHTXRFQVJ.

Vejamos agora o código PHP.

Escreva uma mensagem.

$msg_original = "A_MATEMATICA_EH_LINDA" // escreva sua mensagem toda em caixa alta, ou seja, em letras maiúsculas

Agora vejamos duas funções.

1ª função: É a função que criptografa.

2ª função: Associa cada símbolo do nosso alfabeto "A" ao seu respectivo valor no conjunto Z27.

// (início) função que criptografa.
function criptografa($x) {
  $x = cripto_sistema($x);
  if ($x == 0) { $x = "*0*"; }
  if ($x == 1) { $x = "*1*"; }
  if ($x == 2) { $x = "*2*"; }
  if ($x == 3) { $x = "*3*"; }
  if ($x == 4) { $x = "*4*"; }
  if ($x == 5) { $x = "*5*"; }
  if ($x == 6) { $x = "*6*"; }
  if ($x == 7) { $x = "*7*"; }
  if ($x == 8) { $x = "*8*"; }
  if ($x == 9) { $x = "*9*"; }
  if ($x == 10) { $x = "*10*"; }
  if ($x == 11) { $x = "*11*"; }
  if ($x == 12) { $x = "*12*"; }
  if ($x == 13) { $x = "*13*"; }
  if ($x == 14) { $x = "*14*"; }
  if ($x == 15) { $x = "*15*"; }
  if ($x == 16) { $x = "*16*"; }
  if ($x == 17) { $x = "*17*"; }
  if ($x == 18) { $x = "*18*"; }
  if ($x == 19) { $x = "*19*"; }
  if ($x == 20) { $x = "*20*"; }
  if ($x == 21) { $x = "*21*"; }
  if ($x == 22) { $x = "*22*"; }
  if ($x == 23) { $x = "*23*"; }
  if ($x == 24) { $x = "*24*"; }
  if ($x == 25) { $x = "*25*"; }
  if ($x == 26) { $x = "*26*"; }
  return $x;
}
// (fim) função que criptografa.

// (início) alfabeto.
$A = criptografa(0);
$B = criptografa(1);
$C = criptografa(2);
$D = criptografa(3);
$E = criptografa(4);
$F = criptografa(5);
$G = criptografa(6);
$H = criptografa(7);
$I = criptografa(8);
$J = criptografa(9);
$K = criptografa(10);
$L = criptografa(11);
$M = criptografa(12);
$N = criptografa(13);
$O = criptografa(14);
$P = criptografa(15);
$Q = criptografa(16);
$R = criptografa(17);
$S = criptografa(18);
$T = criptografa(19);
$U = criptografa(20);
$V = criptografa(21);
$W = criptografa(22);
$X = criptografa(23);
$Y = criptografa(24);
$Z = criptografa(25);
$esp = criptografa(26);
// (fim) alfabeto.

Os dois códigos (resumidos) a seguir organizam a mensagem-original para transformá-la em mensagem-cifrada:

// (início) código um
$msg_cifrada = ereg_replace('A',$A,$msg_original);
$msg_cifrada = ereg_replace('B',$B,$msg_cifrada);
$msg_cifrada = ereg_replace('C',$C,$msg_cifrada);
$msg_cifrada = ereg_replace('D',$D,$msg_cifrada);
...
$msg_cifrada = ereg_replace('X',$X,$msg_cifrada);
$msg_cifrada = ereg_replace('Y',$Y,$msg_cifrada);
$msg_cifrada = ereg_replace('Z',$Z,$msg_cifrada);
$msg_cifrada = ereg_replace('_',$esp,$msg_cifrada);
// (fim) código um

// (início) código dois
$msg_cifrada = ereg_replace('\*0\*','A',$msg_cifrada);
$msg_cifrada = ereg_replace('\*1\*','B',$msg_cifrada);
$msg_cifrada = ereg_replace('\*2\*','C',$msg_cifrada);
$msg_cifrada = ereg_replace('\*3\*','D',$msg_cifrada);
$msg_cifrada = ereg_replace('\*4\*','E',$msg_cifrada);
...
$msg_cifrada = ereg_replace('\*23\*','X',$msg_cifrada);
$msg_cifrada = ereg_replace('\*24\*','Y',$msg_cifrada);
$msg_cifrada = ereg_replace('\*25\*','Z',$msg_cifrada);
$msg_cifrada = ereg_replace('\*26\*','_',$msg_cifrada);
// (fim) código dois

Na próxima seção (criptografia.php) veremos todo o código pronto para ser utilizado.

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

PostgreSQL: comandos básicos

Programando PostgreSQL + PHP

Método de Newton e PHP

Leitura recomendada

XSS - Um exemplo de ataque

Criptografia do método GET no PHP

Pentesting on PHP apps: XSS

Autenticação de sites com PHP e MySQL

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

  
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