2009-11-15 26 views
8

Estoy aprendiendo MD5. Encontré un término 'hash' en la mayoría de las descripciones de MD5. Busqué en Google 'hash', pero no pude encontrar el término exacto de 'hash' en la programación de la computadora.¿Qué es hash exactamente?

¿Por qué usamos 'hash' en la programación de la computadora? ¿Cuál es el origen de la palabra?

+18

Hash es un alimento para el desayuno hecho de cortar papas en tiras largas y delgadas (más pequeñas que las papas fritas y más cortas, pero proporcionalmente similares), luego freír la masa de tiras en grasa animal o vegetal. y cocinado Por analogía, 'hacer un hash' de un número significaba convertirse en un otro número irreconocible usando un método que de alguna manera todavía depende del número de entrada. No tengo una cita, así es como he entendido la analogía desde que la escuché en los años 80. Sin embargo, alguien debe haber estado allí cuando se aplicó el término por primera vez. –

Respuesta

10

Diría que cualquier respuesta debe ser conjetura, por lo que haré de esta una wiki de la comunidad.

El hash browns es un alimento para el desayuno hecho de cortar papas en tiras largas y delgadas (más pequeñas que las papas fritas, y más pequeñas, pero proporcionalmente similares), luego freír la masa de tiras en grasa animal o vegetal hasta que se dore juntos, y cocinados. Por analogía, "mezclar" un número significaba convertirlo en otro número, generalmente más pequeño, usando un método que todavía depende de manera determinista del número de entrada.

Creo que el término "hash" se usó por primera vez en el contexto de "tabla hash", que se usaba comúnmente en la década de 1960 en máquinas de tipo mainframe. En estos casos, generalmente un valor entero con un rango grande se convierte en un "índice de tabla hash" que es un entero pequeño. Es importante para una tabla hash eficiente que la "función hash" se distribuya uniformemente, o "plana".

No tengo una cita, así es como he entendido la analogía desde que la escuché en los años 80. Sin embargo, alguien debe haber estado allí cuando se aplicó el término por primera vez.

+0

+1 para analogyy – Xinus

+0

Voy a probar que http://www.youtube.com/watch?v=NHsI-CGjTM0 – Xinus

+1

Por lo tanto, el 'hash' de una cadena sería su índice en la tabla hash. – Don

7

Un valor hash (o simplemente hash), también llamado un resumen del mensaje, es un número generado a partir de una cadena de texto. El hash es sustancialmente más pequeño que el texto , y se genera mediante una fórmula de forma tal que es extremadamente improbable que algún otro texto produzca el mismo valor hash.

+1

Espera, ¿el hash es más pequeño que el texto real? Mis funciones MD5 deben estar rotas, se convierte en hi en 49f68a5c8493ec2c0bf489821c21fc3b – Omar

+0

Ah ... así hash value = hash = message diest. ¿Todos ellos lo mismo? – Moon

+0

@Omar, ** la función hash _normalmente_ convierte datos de un tamaño arbitrario en datos de un tamaño fijo **, de modo que la longitud de salida de la función hash será la misma, independientemente de la longitud de la entrada. Aunque, ** hay excepciones a esta "regla" **, vea la sección ['Rango definido'] (https://en.wikipedia.org/wiki/Hash_function#Defined_range) del [artículo de Wikipedia sobre la función hash] (https://en.wikipedia.org/wiki/Hash_function). –

3

Usted está refiriendo a "hash function". Se usa para generar un valor único para un conjunto dado de parámetros.

Un gran uso de un hash es la seguridad de las contraseñas. En lugar de guardar una contraseña en una base de datos, guarda un hash de la contraseña.

3

Se supone que un hash es una combinación única de valores de 00 a FF (hexadecimal) que representa un determinado dato, ya sea un archivo o una cadena de bytes. Se utiliza principalmente para el almacenamiento y la verificación de contraseñas, y para probar si un archivo es igual a otro archivo (es decir, hash dos archivos, si coinciden, son el mismo archivo).

En general, cualquiera de los algoritmos SHA es preferible a MD5, debido a las colisiones hash que pueden ocurrir al usarlo. Ver this Wikipedia article.

+2

Los valores hash no son únicos y se supone que no son únicos. Hashes no puede decir si dos archivos son iguales; si los hashes coinciden, los archivos podrían ser diferentes. Los hashes se usan para decir si los archivos son diferentes; si los hashes son diferentes, los archivos deben ser diferentes. –

1

añadiendo a la respuesta de gabriel1836, una de las propiedades importantes de la función hash es que es una función de una sola vía, lo que significa que no puede generar la cadena original a partir de su valor hash.

+1

En general, los hashes no son seguros como usted describe. Los hashes regulares, como los utilizados por java.lang.String, son fácilmente invertibles. Estás hablando de un subconjunto de hashes conocidos como "hashes criptográficos". –

1

De acuerdo con la Wikipedia article on hash functions, Donald Knuth en el Arte de la Programación de Computadoras fue capaz de rastrear el concepto de funciones hash a una nota interna de IBM por Hans Peter Luhn en 1953.

Y sólo por diversión, aquí hay un trozo de conversación escuchada citado en Two Women in the Klondike: the Story of a Journey to the Gold Fields of Alaska (1899):

Van a tener que mantener la tabla hash ir todo el día para alimentarnos. 'T será un asunto de orden corto.

1

la función de hash hashes entrada a un valor, requiere un salt value y no se necesita ninguna sal de prueba para almacenar. Las indicaciones son que todo el mundo dice que debemos almacenar la sal coincidencia de tiempo y el nuevo trabajo. El concepto matemáticamente relacionado es bijection