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... |
i | a=4 e b=5 | a=8 e b=22 |
ii | a=23 e b=7 | a=27 e b=28 |
iii | a=12 e b=1 | a=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.