Puedo crear un GUID (como una cadena) y obtener el hash de la misma. Puedo considerar que este hash para ser único?

  • Además, la mayoría de las respuestas son un poco al azar y menos útiles que podrían ser debido a que nadie realmente entiende la pregunta y su intención subyacente. Aclaración iba a hacer esta pregunta y sus respuestas más útiles.
InformationsquelleAutor Mats | 2008-09-26

8 Comentarios

  1. 20

    No de forma tan fiable único como el GUID en sí, no.

    Para expandir, se están reduciendo su singularidad por un factor de 4, pasando de 16 bytes 4 bytes de combinaciones posibles.

    Como se señaló en los comentarios el hash de tamaño va a hacer una diferencia. El 4 bytes cosa era una suposición, horrible en el mejor de los que yo sé, que puede ser utilizado en la .NET, donde el valor predeterminado de hash de tamaño es de 4 bytes (int). Así que usted puede reemplazar lo que he dicho anteriormente, con lo que el tamaño en bytes de tus hash puede ser.

    • 4 si el algoritmo de hash que es perfecto y el hash que contiene 4 veces menos bits que los GUID – ambos de los cuales pueden variar dependiendo del contexto, a la derecha?
    • Criptográficos hash (por ejemplo, MD5, SHA1) son 16-20 o más bytes. Por la mezcla el GUID con tal de hash, no va a reducir la singularidad.
    • De hecho, el riesgo de colisión podría aumentar después de la mezcla, incluso si el hash es mayor que el GUID. Depende del algoritmo.
    • Un hash, por definición, es ‘menos’ única que el original. [Por CIERTO, UN GUID es estadísticamente único]. 4 byte hash es bastante probable que haya colisiones.
  2. 7

    En una palabra, no.

    Supongamos que su hash tiene menos bits que el GUID, por la encasillar principio, no debe existir más de un mapeo de algunos GUID -> hash, simplemente porque hay menos de hashes de GUID.

    Si asumimos que el hash tiene un mayor número de bits que el GUID, hay una muy pequeña, pero finito–la posibilidad de una colisión, asumiendo que usted está utilizando una buena función hash.

  3. 4

    Ninguna función hash que se reduce a un arbitrario del tamaño de bloque de datos a un tamaño fijo número de bits producirá un 1-a-1 asignación entre los dos. No siempre existe una posibilidad de tener dos diferentes bloques de datos se reducirá en la misma secuencia de bits en el hash.

    Buena algoritmos de hash, se minimiza la probabilidad de que esto ocurra, y, en general, más bits en el hash, menor es la probabilidad de una colisión.

  4. 2

    Es no garantizados a ser, debido a colisiones de hash. El GUID en sí es casi garantizada.

    Por motivos prácticos, usted probablemente puede asumir que un hash es único, pero ¿por qué no utilizar el GUID de la misma?

  5. 2

    No, y yo no asumir la singularidad de cualquier valor de hash. Que no importa porque los valores de hash no necesita único, que sólo necesita ser uniforme en toda su gama. Más aún la distribución, el menor número de colisiones se producen (en la tabla de hashing). Menos colisiones significa mejor hashtable rendimiento.

    fyi Para una buena descripción de cómo las tablas hash, lea la aceptó responder a ¿Qué son las tablas de hash y hashmaps y sus casos de uso típicos?

  6. 0

    Si utiliza criptográficos hash (MD5, SHA1, RIPEMD160), el hash será único (modulo colisiones que son muy improbable — SHA1 es utilizado por ejemplo para las firmas digitales, y MD5 es también colisión-resistente en azar entradas). Aunque, ¿por qué quieres el hash de un GUID?

  7. 0

    Me gustaría hash de un GUID para X tamaño con la comprensión de que a veces tengo 10 o menos GUID en el conjunto de lo que yo podría conseguir lejos con un menor hash sin colisión que si tengo 10.000.000 de GUID en un conjunto. Me gustaría ser capaz de especificar el tamaño del hash cuando yo llame a la función.

Dejar respuesta

Please enter your comment!
Please enter your name here