
Estoy desarrollando una aplicación que almacenará muchos archivos y, en el caso de imágenes, cambiará su tamaño y guardará las diferentes miniaturas que necesitamos, de modo que cuando un usuario cargue una imagen, guardará más 8 archivos (esto es necesario). ).
Para evitar archivos duplicados y ahorrar espacio en mi servidor de alojamiento estático, mi aplicación guarda el nombre del archivo como "MD5.BYTE_SIZE" (por ejemplo: 054d995efa7e9c91569d205d24a2b486.188154)
Ya he usado este esquema de archivos en otros clientes sin ningún problema, pero necesito saber, específicamente para este proyecto, si existe la posibilidad de que el usuario envíe un archivo con el mismo MD5 y la misma longitud.
Si es así, ¿cuál es la mejor manera de guardar los nombres de mis archivos? ¿Con dos hashes diferentes (como MD5.SHA-256.BYTE_SIZE)?
Respuesta1
A efectos prácticos, cero, a menos que el usuario intente activamente crear dos archivos que tengan el mismo hash, lo cual es posible con MD5.
Si utiliza SHA-256 en su lugar, "cero" (para fines prácticos) incluso si el usuario intenta activamente crear dos archivos con el mismo tamaño.
La probabilidad exacta es de alrededor de 1/2^128 para que dos archivos diferentes generen el mismo hash. Debido a la paradoja del cumpleaños, necesitaría alrededor de 2^64 archivos hasta que haya un 50% de posibilidades de que dos tengan el mismo hash. No te preocupes por eso en la práctica. Para SHA256, los números son 1/2^256 y 2^128, respectivamente. Estos números también se conocen como "no van a suceder".
Respuesta2
Teóricamente es posible, pero en realidad la posibilidad de que dos archivos diferentes tengan la misma suma de comprobación MD5 es extremadamente pequeña.
En otras palabras, es tan pequeño que esencialmente puedes tratar este evento como imposible en lo que respecta a tu programa.