Me gustaría generar un identificador único basado en el contenido de una matriz. Mi enfoque inicial fue simplemente hacer:
$key = md5(json_encode($array));Sin embargo, me gustaría estar absolutamente seguro de que la clave es única y existe una posibilidad remota de que dos matrices distintas puedan producir el mismo hash md5. La idea actual es hacer:
$key = base64_encode(json_encode($array));Se garantiza que esto es único, pero produce una clave bastante larga. ¿Puedo usar sha512 o este tipo de hash también tiene el mismo potencial de colisión de claves que md5? ¿Hay alguna forma de generar una clave más corta que el método base64 que está 100% garantizado como único?
Para ser 100% claro, mi pregunta es: ¿Cómo puedo generar el identificador 100% único más corto posible para un conjunto de datos?
Si desea una clave única 100 % garantizada que coincida con su contenido, entonces la única forma es utilizar la longitud completa de su contenido. Puede usar la cadena json_encoded tal cual, o puede ejecutarla a través de base64_encode() o bin2hex() o similar si desea una cadena que no tenga caracteres "especiales". Cualquier función hash como md5, sha1, sha256, etc. obviamente no puede ser 100% única, porque tienen una longitud fija y debido al https://en.wikipedia.org/wiki/Pigeonhole_principle , necesariamente debe haber resultados no únicos para contenido de entrada que es más grande que el hash.
En la práctica, ahora se han publicado las colisiones md5 y sha1, pero existen funciones hash más sólidas donde no se conocen o esperan colisiones durante mucho tiempo, por lo que también podría considerar el uso de un algoritmo hash moderno y estar bastante seguro de que no tendrá ninguna. duplicados