quarta-feira, 8 de fevereiro de 2012

(PHP) Codificar String com valor inteiro

Surgiu um desafio legal na comunidade PHP para n00bs. Resolvi criar a função para participar do mesmo
Se trata de uma função para codificar uma string, em php obviamente.

Definitivamente a função que crie está correta e totalmente testada
Ao contrário de outras funções de codificação, ela é praticamente impossível  de ser burlada,
pois retorna um número inteiro do acopla todos caracteres, sendo impossível divi-los

Assim tendo que usar brute-force para pode quebra-la. Mas ai que está o problema
Esses métodos de codificar com valores finais inteiros além de serem leves e rápidos para um bruce-force
Eles retornam números iguais para várias strings.

Por exemplo:
O valor de A é 40 o valor de B 50 e o valor de C 90
Logo a string "AB" terá valor 90. Bem como a string "C" terá o valor 90, facilitando o método bruce-force

Pensando assim, resolvi definitivamente colocar um basta nisto, usando valores de forma sequencial.
Digamos assim, no meu código, ele pega o valor do loop atual, e ainda adiciona no valor inteiro, também pega o caracter anterior e adiciona no atual.
Assim tendo menos probabilidade de "AB" ser igual a "C"
Por A somára com B e posteriormente adicionará o valor do loop atual, no caso 2
Logo 50 + 40 = 90 com mais o valor das sequenciais do loop. 90 + 3 = 93 será nosso valor, contando mais com o valor B que é contado duas vezes por ele mesmo e A, teremos o valor 113 assim sendo diferente de "D"
Que abriga o valor 90, tornando este método muito seguro, apenas perdendo para hashs famosos, como md5, sha1 e até alguns que as pessoas fazem pessoalmente

Segue o código:

function codificarString($t, $l)
{
/*
* Inicializar todas as variáveis
* $r com primeiro caractere + nível
* Variável $i usada para o loop while
*
*/
$i = strlen($t);
$r = ord($t).$l;
while(--$i)
/*
* Operador ternário evita que " " seja igual a "D"
* Outras operações similares. Soma o valor para retorno
*
*/
$r += $i > 1 ? $i + (ord($t{$i}) + ord($t{$i-1})) : ord($t{$i-1});


/*
* Retornar o valor total
* Adicionado ao nível
*
*/
return ($r + $l);
}



echo "Meu texto codificado é " . codificarString("Hello World", 13);

O primeiro parametro será a string a codificar, o segundo será o nível (acrescimo a string) para codificação. EU particularmente aconselho de 11 a 33, mas isto é de sua opinião.
Espero que tenham gostado do post

Nenhum comentário:

Postar um comentário