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

Por: Laudelino em 05/04/2005


Adicionando símbolos no alfabeto



No script criptografa.php que desenvolvemos, só temos as letras do alfabeto todas em caixa alta (maiúsculo) e o espaço (underline). Mas, dependendo das nossas necessidades, podemos adicionar novos símbolos.

Vamos adicionar ao nosso alfabeto "A" os seguintes símbolos:

!, ?, , (vírgula) e . (ponto).

Note que agora nosso alfabeto é composto de 31 símbolos, então, não poderemos mais trabalhar com o conjunto Z27, devemos trabalhar agora com o conjunto Z31.

Relacionamos os novos símbolos com seus valores numéricos:

!=27, ?=28, ,=29 e .=30.

O que foi dito acima deve ser feito no código PHP. Modifique o valor de $n na função Z_n($x) para 31:

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

$n = 31; // Z_n
...
// (fim) Z_n

Feito isso, adicione os novos símbolos na função que criptografa (cripto_sistema($x)), no alfabeto, no código um e no código dois.

... // (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 == 25) { $x = "*25*"; }
if ($x == 26) { $x = "*26*"; }
if ($x == 27) { $x = "*27*"; } // adicionado !
if ($x == 28) { $x = "*28*"; } // adicionado ?
if ($x == 29) { $x = "*29*"; } // adicionado ,
if ($x == 30) { $x = "*30*"; } // adicionado .
return $x;
}
// (fim) função que criptografa.

// (início) alfabeto.
$A = criptografa(0);
$B = criptografa(1);
...
$Z = criptografa(25);
$esp = criptografa(26);
$carac_27 = criptografa(27); // adicionado !
$carac_28 = criptografa(28); // adicionado ?
$carac_29 = criptografa(29); // adicionado ,
$carac_30 = criptografa(30); // adicionado .
// (fim) alfabeto.

// (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('Z',$Z,$msg_cifrada);
$msg_cifrada = ereg_replace('_',$esp,$msg_cifrada);
$msg_cifrada = ereg_replace('!',$carac_27,$msg_cifrada); // adicionado !
$msg_cifrada = ereg_replace('\?',$carac_28,$msg_cifrada); // adicionado ? VEJA OBSERVAÇÃO 3!
$msg_cifrada = ereg_replace(',',$carac_29,$msg_cifrada); // adicionado ,
$msg_cifrada = ereg_replace('\.',$carac_30,$msg_cifrada); // adicionado . VEJA OBSERVAÇÃO 3!
// (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('\*25\*','Z',$msg_cifrada);
$msg_cifrada = ereg_replace('\*26\*','_',$msg_cifrada);
$msg_cifrada = ereg_replace('\*27\*','!',$msg_cifrada); // adicionado !
$msg_cifrada = ereg_replace('\*28\*','?',$msg_cifrada); // adicionado ?
$msg_cifrada = ereg_replace('\*29\*',',',$msg_cifrada); // adicionado ,
$msg_cifrada = ereg_replace('\*30\*','.',$msg_cifrada); // adicionado .
// (fim) código dois
...

Lembrando que, com estas modificações não estamos mais trabalhando em Z27, mas em Z31, então os valores de a e b da nossa função Cripto-Sistema antiga podem não funcionar em Z31, pois a função pode deixar de ser uma bijeção. O valor de a deve ser escolhido, como foi dito na seção Implementando o Cripto-Sistema, de modo que o Máximo Divisor Comum entre a e 31 seja 1. Por conta disso, separei uns valores de a e b que podem ser utilizados em Z31.

Criptografa com...Descriptografa com...
ia=4 e b=5a=8 e b=22
iia=23 e b=7a=27 e b=28
iiia=12 e b=1a=13 e b=18


Se você entendeu esta seção, então tente descriptografar as duas mensagens a seguir, que foram criptografadas em Z31 com os símbolos adicionados nesta seção (! ? . ,).

VQFG?QVPTFQ,.PTF_R.Y criptografada com a=4 e b=5. Para descriptografar use a=8 e b=22.

_,SBSXPMIBQSPSJ.,?POB_IPMONIPIERSMSK criptografada com a=13 e b=18. Para descriptografar use a=12 e b=1.

Observação 3: Alguns símbolos precisam ser "adaptados" para serem adicionados. Por exemplo, os símbolos . (ponto) e ? (interrogação) que foram adicionados nesta seção. Isto porque eles já exercem uma função na linguagem PHP, outro símbolo deste tipo, em PHP, é o $ (cifrão). Dependendo da linguagem a ser utilizada PHP, C, C++ etc, estes "símbolos especiais" variam.

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

Método de Newton e PHP

Programando PostgreSQL + PHP

Leitura recomendada

Instalações PHP não seguras

Introdução a manipulação de erros em PHP

Autenticação de sites com PHP e MySQL

Dicas básicas de segurança no PHP

XSS - Um exemplo de ataque

  
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