Creo un GUID (como una cadena) y obtengo el hash del mismo. ¿Puedo considerar este hash como único?¿El hash de un GUID es único?
Respuesta
No es tan confiablemente único como el GUID en sí, no.
Solo para expandir, está reduciendo su unicidad en un factor de 4, pasando de 16 bytes a 4 bytes de combinaciones posibles.
Como se señala en los comentarios, el tamaño del hash hará la diferencia. La cosa de 4 bytes fue una suposición, horrible en el mejor de los casos, sé que se puede usar en .NET, donde el tamaño de hash predeterminado es de 4 bytes (int). Así que puedes reemplazar lo que dije arriba con cualquier tamaño de byte que tu hash pueda ser.
4 si el algoritmo de hash es perfecto y el hash contiene 4 veces menos bits que el GUID, los cuales pueden variar dependiendo del contexto, ¿no? – bzlm
Los hash criptográficos (por ejemplo, MD5, SHA1) tienen 16-20 o más bytes.Al mezclar el GUID con dicho hash, no reducirá la exclusividad. – zvrba
De hecho, el riesgo de colisión podría * aumentar * después de hash, incluso si el hash es más grande que el GUID. Depende del algoritmo. – bzlm
Es no garantizado ser, debido a colisiones hash. El GUID en sí mismo está casi garantizado.
Por razones prácticas, probablemente pueda asumir que un hash es único, pero ¿por qué no usar el GUID?
Nope.
ver aquí, si quieres un mini GUID: http://blogs.msdn.com/oldnewthing/archive/2008/06/27/8659071.aspx
En una palabra, no.
Supongamos que su hash tiene menos bits que el GUID, por el principio del casillero, debe existir más de un mapeo de algunos GUID -> hash simplemente porque hay menos hashes que GUIDS.
Si suponemos que el hash tiene un número mayor de bits que el GUID, existe una posibilidad muy pequeña, pero finita, de una colisión, suponiendo que está utilizando una buena función hash.
Ninguna función hash que reduce un bloque de datos de tamaño arbitrario a un número de bits de tamaño fijo producirá una correspondencia de 1 a 1 entre los dos. Siempre existirá la posibilidad de que se reduzcan dos bloques de datos diferentes a la misma secuencia de bits en el hash.
Los buenos algoritmos hash minimizan la probabilidad de que esto ocurra, y en general, cuantos más bits haya en el hash, menor será la posibilidad de una colisión.
No, y no asumiría la exclusividad de ningún valor hash. Eso no debería importar porque los valores de hash no necesitan ser únicos, solo necesitan distribuirse uniformemente en todo su rango. Cuanto más pareja sea la distribución, menos colisiones tendrá lugar (en la tabla hash). Menos colisiones significan mejor rendimiento de hashtable.
FYI Para una buena descripción de cómo las tablas hash de trabajar, leer la respuesta aceptada a What are hashtables and hashmaps and their typical use cases?
Si utiliza código criptográfico (MD5, SHA1, RIPEMD160), el hash será único (módulo colisiones que son muy improbables - SHA1 se usa, por ejemplo, para firmas digitales, y MD5 también es resistente a colisiones en entradas aleatorias). Sin embargo, ¿por qué quieres hash un GUID?
- 1. ¿Es seguro asumir que un GUID siempre será único?
- 2. Cómo validar GUID es un GUID
- 3. Obtener hash string/guid desde un objeto jQuery
- 4. ¿Cómo asegurarnos de que un guid generado sea único globalmente?
- 5. ¿Es mejor usar un identificador único (GUID) o un bigint para una columna de identidad?
- 6. ¿Cuál es el tipo de GUID?
- 7. ¿Es buena idea eliminar el guión de un GUID?
- 8. ¿Cómo generar un hash único para una URL?
- 9. Cómo comprobar si el GUID es cero
- 10. Convirtiendo un Guid a Nullable Guid
- 11. localmente único identificador
- 12. Creación de un nombre de archivo único (hash) para imágenes cargadas por el usuario
- 13. Cómo convertir guid? guid
- 14. ¿Qué es un buen identificador de PC único?
- 15. Guid es todo 0 (ceros)?
- 16. ¿Hay alguna manera de crear un código corto único como corto GUID?
- 17. ¿El nombre de un paquete es único para las aplicaciones?
- 18. ¿Cuál es la longitud de cadena de un GUID?
- 19. ¿Cuál es la diferencia entre un "nonce" y un "GUID"?
- 20. Obtiene el tipo de GUID
- 21. Prueba con un guid ... ¿cómo configuro la variable como Guid?
- 22. ¿Cuál es la probabilidad de adivinar (hacer coincidir) un Guid?
- 23. ¿Cuál es el significado de grep en un Hash?
- 24. ¿ManagedThreadID no es único?
- 25. Cuál es el identificador único para un elemento DOM/nodo
- 26. ¿Es jSessionId realmente único?
- 27. Servidor SQL: ¿por qué el 15º carácter de un GUID siempre es 4?
- 28. WIX Autogenerate GUID *?
- 29. NHibernate Guid generador si es nuevo
- 30. GUID en un archivo SLN
Además, la mayoría de las respuestas son un tanto al azar y menos útiles de lo que podrían ser, porque nadie realmente entiende la pregunta y su intención subyacente. La aclaración hará que esta pregunta y sus respuestas sean más útiles. – bzlm