Hash MD5 duplicado, e agora?

193 views
Skip to first unread message

Bonieky Lacerda

unread,
Nov 23, 2010, 9:43:12 PM11/23/10
to PHP Paraíba
Opa galera, beleza?

O muído é o seguinte.
Estou fazendo um sistema de cache um pouco diferenciado e estou com
uma dúvida quanto a possíveis futuros bugs.

Primeiramente irei explicar a situação...
O sistema é cacheado(em arquivos) por partes, que são identificadas
por três strings(na verdade são mixeds)
(Exemplo: "Bonieky/Lacerda/Leal", Bonieky, Lacerda e Leal são exemplos
de três strings de identificação, separados por barras).

No exemplo acima, um md5 para nomear o arquivo ficaria:
f167e907418ed221837336a807ab4933.html
Porém, sabemos que, no md5, existe a possibilidade de duas strings
formarem o mesmo hash. E ai? O sistema terá centenas/milhares de
arquivos de cache. E se uma mulesta dessa der o mesmo hash?!

Então fica aqui minha dúvida, qual solução vocês conseguem pensar para
este problema? Aceito inclusive sugestões de outros métodos de
criptografia, porém os nomes dos arquivos terão que ter, se possível,
a mesma quantidade de caracteres (inviabilizando um base64, por
exemplo).

Maurício Linhares

unread,
Nov 23, 2010, 10:05:39 PM11/23/10
to php...@googlegroups.com
Opa Bonieky,

Algoritmos de hashing normalmente vão gerar colisões (em alguns isso é
até uma coisa boa, pra não espalhar muito) então o sistema que
"hasheia" tem que cuidar disso. Acho que talvez você esteja procurando
a solução errada pro problema, normalmente se usa hashing ou pra
validar o estado do arquivo ou pra gravar senhas de forma que seja
difícil de fazer engenharia reversa nelas, nesse seu caso, o trio de
strings já não é único? porque ele não é utilizado como nome do
arquivo?

-
Maurício Linhares
http://codeshooter.wordpress.com/ | http://twitter.com/mauriciojr

2010/11/23 Bonieky Lacerda <bon...@gmail.com>:

> --
> Você está recebendo esta mensagem porque se inscreveu no grupo "PHP Paraíba" dos Grupos do Google.
> Para postar neste grupo, envie um e-mail para php...@googlegroups.com.
> Para cancelar a inscrição nesse grupo, envie um e-mail para php-pb+un...@googlegroups.com.
> Para obter mais opções, visite esse grupo em http://groups.google.com/group/php-pb?hl=pt-BR.
>
>

Sthenley Macedo

unread,
Nov 23, 2010, 10:11:37 PM11/23/10
to php...@googlegroups.com
Em 24 de novembro de 2010 00:43, Bonieky Lacerda <bon...@gmail.com> escreveu:
Opa galera, beleza?

Salve!
 
Então fica aqui minha dúvida, qual solução vocês conseguem pensar para
este problema? Aceito inclusive sugestões de outros métodos de
criptografia, porém os nomes dos arquivos terão que ter, se possível,
a mesma quantidade de caracteres (inviabilizando um base64, por
exemplo).

Que tal complementar com o timestamp?
--
__________________________________________
  S t h e n l e y   M a c e d o   CREA 2080TDPB
 LinkedinFacebook

Vítor Baptista

unread,
Nov 23, 2010, 10:24:55 PM11/23/10
to php...@googlegroups.com
Cara, primeiro isso deveria ser um problema tão raro que você não precisaria se preocupar. Se o MD5 não basta, usa SHA1. Mas se, mesmo assim, você quer ter certeza, a solução que conheço é fazer um algoritmo do tipo:

1. Gera o hash;
2. Se ele existir, adiciona algum valor aleatório a chave de entrada (o timestamp, por exemplo) e volta para o passo anterior;
3. Profit.

Pra isto, você precisaria de mais um campo (seed, por exemplo) que poderia ser nulo. Ele pode servir por si só pro caso do problema ser não de conflitos no algoritmo, mas de entradas iguais.

Abraços,

2010/11/24 Sthenley Macedo <con...@sthenley.com>

--
Você está recebendo esta mensagem porque se inscreveu no grupo "PHP Paraíba" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para php...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para php-pb+un...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/php-pb?hl=pt-BR.



--
Vítor Baptista

Bonieky

unread,
Nov 24, 2010, 6:27:48 AM11/24/10
to php...@googlegroups.com
Bom dia a todos.

Grande Maurício Linhares,
kkkkkkkkkkk, Muito boa. Após abrir meus olhos pra possibilidade de simplesmente deixar as strings como são, percebi que estava querendo 'complicar' o simples, até porque elas não tem espaço nem - ainda - caracteres especiais.
Talvez devido ao 'medo' de futuramente precisar usar algum tipo de caractere especial, que teria que tratar e bla bla bla. Ou pelo 'medo' de deixar as informações como elas são, porém essas strings não são controladas pelo usuário, então o sistema sabe falar a língua dele direitinho. :D

Sthenley Macedo, Vítor Baptista
Iae Dotôres, bom, seria inviável usar um timestamp neste caso, pois futuramente na verificação, não saberei qual seria esse timestamp e consequentemente não conseguirei gerar o hash exato para comparação.

Vítor Baptista

unread,
Nov 26, 2010, 12:29:53 AM11/26/10
to php...@googlegroups.com
Bonieky,

2010/11/24 Bonieky <bon...@gmail.com>

Grande Maurício Linhares,
kkkkkkkkkkk, Muito boa. Após abrir meus olhos pra possibilidade de simplesmente deixar as strings como são, percebi que estava querendo 'complicar' o simples, até porque elas não tem espaço nem - ainda - caracteres especiais.
Talvez devido ao 'medo' de futuramente precisar usar algum tipo de caractere especial, que teria que tratar e bla bla bla. Ou pelo 'medo' de deixar as informações como elas são, porém essas strings não são controladas pelo usuário, então o sistema sabe falar a língua dele direitinho. :D

Se esta for uma opção, então tá resolvido :P
 
Sthenley Macedo, Vítor Baptista
Iae Dotôres, bom, seria inviável usar um timestamp neste caso, pois futuramente na verificação, não saberei qual seria esse timestamp e consequentemente não conseguirei gerar o hash exato para comparação.

Pois é, nesse caso você precisaria guardar o timestamp em algum lugar.

De qualquer forma, cara, relaxa. Se achar que pode haver alguma possibilidade de você ter alguns bilhões de registros e o MD5 não servir, usa SHA-1.

Abraços, 

--
Vítor Baptista

Reply all
Reply to author
Forward
0 new messages