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:
- ¿Qué algoritmo se usa en WhatsApp?
- ¿Cuál es la diferencia entre los algoritmos de programación de tareas y los algoritmos de equilibrio de carga (estáticos y dinámicos)?
- ¿Cuál es la mejor manera de analizar un currículum en los campos de la base de datos? ¿Qué hacer si tiene muchos currículums y necesita que los datos se extraigan en elementos individuales que se pueden colocar en una base de datos?
- ¿Cuál es el mecanismo fundamental detrás de los generadores de números aleatorios?
- En la tercera edición de 'Introducción a los algoritmos', ¿por qué comprar acciones es un problema de subarrays máximos?
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:
- 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.
- 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.