¿Qué es un algoritmo hash?

Una función hash traduce un valor de un espacio a otro. Por ejemplo, considere esta función hash muy simple:

f (n) = 2 * n

Para cualquier valor de entrada obtendrá un nuevo valor que es único para esa entrada. f (1) = 2, f (2) = 4, etc. En la práctica, esta función hash no es muy útil, ya que lo ideal sería que el valor hash fuera más pequeño que la entrada. Esto le permite tener una función hash que toma una entrada grande y la asigna a un valor más pequeño, como una función que asigna valores de cadena a números como el siguiente:

f (string) = string.length

Este tipo de función simple le permite tomar una entrada como “hola mundo” y asignarla a un número como f (“hola mundo”) = 11.

En la práctica, hay algunas aplicaciones de funciones hash:

  1. Tablas de hash . Estas son estructuras de datos que almacenan datos para búsquedas muy eficientes. La función hash actúa como el catálogo de tarjetas en la biblioteca, permitiéndole saber en qué estante buscar la entrada. Esto le permite almacenar una gran cantidad de datos pero encontrarlos muy rápidamente.
  2. Cifrado Las funciones hash son una forma eficiente de encriptación unidireccional, lo que significa que usted encripta un valor pero no puede desencriptarlo. Esto se usa comúnmente para el almacenamiento de contraseñas donde puede usar una función hash como f (“mypassword”) = ALKJDLKFSJDJFSD. Si bien no puede descifrar el valor hash, la próxima vez que ingrese su contraseña, el sistema puede hacerlo y comparar los dos valores hash. Mientras la función hash tenga una baja tasa de colisión, puede estar seguro de que las contraseñas son las mismas.

Las funciones hash que tienen altas tasas de colisión (es probable que dos entradas tengan el mismo valor hash) pueden ser útiles para las tablas hash, mientras que las funciones hash con bajas tasas de colisión (es poco probable que dos entradas tengan el mismo valor hash) son útiles para el cifrado.

Recientemente, Google anunció un nuevo tipo de ataque que permite la creación de colisiones hash a propósito para una popular función hash SHA1. Esto es importante porque la capacidad de crear colisiones de funciones hash socava el uso de funciones hash para el cifrado.

Un algoritmo hash es una función que convierte una cadena de datos en una salida de cadena numérica de longitud fija. La cadena de salida es generalmente mucho más pequeña que los datos originales. Los algoritmos de hash están diseñados para ser resistentes a colisiones, lo que significa que hay una probabilidad muy baja de que se cree la misma cadena para datos diferentes. Dos de los algoritmos hash más comunes son el MD5 (algoritmo de resumen de mensaje 5) y el SHA-1 (algoritmo de hash seguro). Las sumas de comprobación MD5 Message Digest se usan comúnmente para validar la integridad de los datos cuando se transfieren o almacenan archivos digitales.

Te estoy diciendo la definición básica que es fácil de entender.

Un algoritmo hash es una función que convierte una cadena de datos en una salida de cadena numérica de longitud fija. La cadena de salida es generalmente mucho más pequeña que los datos originales. Los algoritmos de hash están diseñados para ser resistentes a colisiones, lo que significa que hay una probabilidad muy baja de que se cree la misma cadena para datos diferentes. Dos de los algoritmos hash más comunes son el MD5 (algoritmo de resumen de mensaje 5) y el SHA-1 (algoritmo de hash seguro). Las sumas de comprobación MD5 Message Digest se utilizan comúnmente para validar la integridad de los datos cuando se transfieren o almacenan archivos digitales …

Básicamente, una función hash asigna un dato a otro. Se usan para generar cosas como índices y sumas de verificación. Los hash criptográficos se utilizan para firmar datos y para cifrar contraseñas. Wikipedia tiene una explicación bastante bien escrita que casi con toda seguridad es más clara que la mía.

More Interesting

Cómo usar un algoritmo para resolver problemas de la vida real

¿Alguien puede aprender las ideas asociadas con los algoritmos sin aprender a codificar primero?

¿La programación se trata de definiciones de variables, para bucles, ifs y estructuras de datos?

¿Aproximadamente cuántas personas en el mundo pueden resolver un cubo rubix sin algoritmos?

¿Por qué no ha habido un codificador indio en la región 2400+ después de Rudradev Basak, especialmente cuando la cultura de codificación en el país está en aumento?

Estoy comenzando un proyecto de clasificación de picos, ¿dónde encuentro datos sin procesar y / o simulados?

¿Cómo funciona esta recursión?

¿Cómo analizaría la complejidad temporal de fibbonacci?

Dado que solo quedan 2 meses para las regiones regionales de ACM ICPC, ¿cuántos problemas podría resolver allí si comenzara a practicar ahora, teniendo solo la idea más básica sobre algoritmos?

La mayoría de las definiciones / teoremas / ejemplos de privacidad diferencial que he encontrado son para consultas que devuelven un solo número por columna, como un promedio. ¿Existen mecanismos diferencialmente privados para otros tipos de consultas, como los que subconjustan filas en función de algún criterio?

Si hago algunos cálculos iterando sobre el bucle mientras tomo las entradas. A partir de entonces, imprimiendo el resultado. ¿Puedo decir que es O (1) complejidad?

¿Hay libros / tutoriales para algoritmos y estructuras de datos que sean más amigables y para principiantes?

¿Qué curso de Udemy es mejor para aprender estructuras de datos si ya he aprendido los conceptos básicos (matrices, estructuras, punteros, listas enlazadas)?

Al modelar un autómata determinista de estado finito, ¿qué algoritmo de recorrido gráfico debe usarse?

Cómo escribir un programa simple usando pseudocódigos