
Estou desenvolvendo um aplicativo que irá armazenar muitos arquivos, e no caso de imagens, ele irá redimensioná-los e salvar as diferentes miniaturas que precisamos, então quando um usuário fizer upload de uma imagem, ele salvará mais 8 arquivos (isso é necessário ).
Para evitar arquivos duplicados e economizar espaço no meu servidor de hospedagem estática, meu aplicativo está salvando o nome do arquivo como "MD5.BYTE_SIZE" (ex: 054d995efa7e9c91569d205d24a2b486.188154)
Já utilizei esse esquema de arquivos em outros clientes sem problemas, mas preciso saber, especificamente para este projeto, se existe a possibilidade do usuário enviar um arquivo com o mesmo MD5, e mesmo tamanho de comprimento.
Em caso afirmativo, qual é a melhor maneira de salvar meus nomes de arquivos? Com dois hashes diferentes (como MD5.SHA-256.BYTE_SIZE)?
Responder1
Para fins práticos, zero, a menos que o usuário tente ativamente criar dois arquivos que tenham o mesmo hash, o que é possível com MD5.
Se você usar SHA-256, "zero" (para fins práticos), mesmo que o usuário tente ativamente criar dois arquivos com o mesmo tamanho.
A probabilidade exata é algo em torno de 1/2 ^ 128 de dois arquivos diferentes gerarem o mesmo hash. Devido ao paradoxo do aniversário, você precisaria de cerca de 2 ^ 64 arquivos até que houvesse 50% de chance de que dois tivessem o mesmo hash. Não se preocupe com isso na prática. Para SHA256, os números são 1/2 ^ 256 e 2 ^ 128, respectivamente. Esses números também são conhecidos como “não vão acontecer”.
Responder2
Teoricamente é possível, mas na realidade a chance de dois arquivos diferentes terem a mesma soma de verificação MD5 é extremamente pequena.
Em outras palavras, tão pequeno que você pode essencialmente tratar esse evento como impossível no que diz respeito ao seu programa.