random - generador - ¿Cuántos elementos aleatorios antes de MD5 producen colisiones?
md5 hash php (8)
Así que espera, ¿es?
md5(filename) + timestamp
o:
md5(filename + timestamp)
Si es el primero, está casi todo el camino hacia un GUID, y no me preocuparía. Si es este último, entonces vea la publicación de Karg sobre cómo se encontrará eventualmente con colisiones.
Tengo una biblioteca de imágenes en Amazon S3. Para cada imagen, md5 la URL de origen en mi servidor más una marca de tiempo para obtener un nombre de archivo único. Como S3 no puede tener subdirectorios, necesito almacenar todas estas imágenes en una sola carpeta plana.
¿Debo preocuparme por las colisiones en el valor hash MD5 que se genera?
Bono: ¿Cuántos archivos podría tener antes de comenzar a ver colisiones en el valor hash que produce MD5?
Aunque ha habido problemas bien publicitados con MD5 debido a colisiones, las colisiones NO INTENCIONALES entre datos aleatorios son extremadamente raras . Por otro lado, si utiliza el nombre del archivo, no se trata de datos aleatorios, y esperaría colisiones rápidamente.
Aunque las colisiones aleatorias de MD5 son extremadamente raras, si los usuarios pueden proporcionar archivos (que se almacenarán literalmente), entonces pueden generar colisiones. Es decir, pueden crear deliberadamente dos archivos con el mismo MD5sum pero diferentes datos. Asegúrese de que su aplicación pueda manejar este caso de manera sensata, o quizás use un hash más fuerte como SHA-256.
La colisión MD5 es extremadamente improbable. Si tiene 9 billones de MD5, solo hay una posibilidad en 9 trillones de que haya una colisión.
La probabilidad de que solo dos hash colisionen accidentalmente es 1/2 128, que es 1 en 340 undecillion 282 decillion 366 nonillion 920 octillion 938 septillion 463 sextillion 463 quintillion 374 cuatrillion 607 trillion 431 billion 768 million 211 thousand 456.
Sin embargo, si mantienes todos los hashes, entonces la probabilidad es un poco más alta gracias a la paradoja del cumpleaños . Para tener un 50% de probabilidad de que cualquier hash colisione con cualquier otro hash necesitas 2 64 hashes. Esto significa que para obtener una colisión, en promedio, tendrá que copiar 6 mil millones de archivos por segundo durante 100 años .
Realmente no importa qué tan probable sea; es posible. Podría suceder en las dos primeras cosas que hash (muy poco probable, pero posible), por lo que tendrás que soportar las colisiones desde el principio.
S3 puede tener subdirectorios. Simplemente ponga un "/" en el nombre de la clave y podrá acceder a los archivos como si estuvieran en directorios separados. Lo uso para almacenar archivos de usuario en carpetas separadas en función de su ID de usuario en S3.
Por ejemplo: "mybucket / users / 1234 / somefile.jpg". No es exactamente lo mismo que un directorio en un sistema de archivos, pero la API S3 tiene algunas características que le permiten funcionar casi igual. Puedo pedirle que liste todos los archivos que comienzan con "users / 1234 /" y me mostrará todos los archivos en ese "directorio".
Una regla aproximada para las colisiones es la raíz cuadrada del rango de valores. Su MD5 sig tiene presumiblemente 128 bits de largo, por lo que es probable que vea colisiones por encima y más allá de 2 ^ 64 imágenes.