encryption hash obfuscation

encryption - ¿Cuál es la diferencia entre Ofuscación, Hashing y Encriptación?



obfuscation (11)

¿Cuál es la diferencia entre Ofuscación, Hashing y Encriptación?

Aquí está mi entendimiento:

  • Hashing es un algoritmo unidireccional; no se puede revertir
  • La ofuscación es similar al cifrado pero no requiere ningún "secreto" para entender (ROT13 es un ejemplo)
  • El cifrado es reversible, pero se requiere un "secreto" para hacerlo

Así es como siempre lo he visto.

  • Hashing está derivando un valor de otro, utilizando un algoritmo establecido. Dependiendo del algoritmo utilizado, esto puede ser de una manera, puede que no.

  • La ofuscación hace que sea más difícil leer algo mediante el reemplazo de símbolos.

  • El cifrado es como hashing, excepto que el valor depende de otro valor que proporcione el algoritmo.


Esa es una explicación de alto nivel. Trataré de refinarlos:

Hashing: en un mundo perfecto, es un oráculo al azar. Para la misma entrada X, siempre recibe la misma salida Y, que de ninguna manera está relacionada con X. Esto es matemáticamente imposible (o al menos no probado para ser posible). Lo más cerca que nos encontramos son las funciones de trampa. H (X) = Y para con H-1 (Y) = X es tan difícil de hacer que es mejor que intentes con la fuerza bruta Z tal que H (Z) = Y

Ofuscación (mi opinión) - Cualquier función f, tal que f (a) = b donde confías en que f es secreto. F puede ser una función hash, pero la parte "ofuscación" implica seguridad a través de la oscuridad. Si nunca viste ROT13 antes, sería ofuscación

Cifrado - Ek (X) = Y, Dl (Y) = X donde E es conocido por todos. k y l son claves, pueden ser las mismas (en simétrica, son lo mismo). Y es el texto cifrado, X es el texto claro.


Esa no es una mala descripción de alto nivel. Aquí hay algunas consideraciones adicionales:

Por lo general, el hashing reduce una gran cantidad de datos a un tamaño mucho más pequeño. Esto es útil para verificar el contenido de un archivo sin tener que tener dos copias para comparar, por ejemplo.

El cifrado implica el almacenamiento de algunos datos secretos, y la seguridad de los datos secretos depende de mantener una "llave" separada de los tipos malos.

La ofuscación oculta información sin una clave separada (o con una clave fija). En este caso, mantener el método en secreto es la forma de mantener la seguridad de los datos.

A partir de esto, puede ver cómo un algoritmo hash puede ser útil para firmas digitales y validación de contenido, cómo se utiliza el cifrado para proteger sus archivos y conexiones de red, y por qué la ofuscación se usa para la gestión de derechos digitales.


Hashing es una técnica para crear claves semi exclusivas basadas en datos más grandes. En un hash dado, eventualmente tendrás "colisiones" (por ejemplo, dos datos diferentes que se calculan con el mismo valor hash) y cuando lo haces, normalmente creas un tamaño de clave hash más grande.

la ofuscación generalmente implica tratar de eliminar pistas útiles (es decir, nombres de funciones / variables significativos), eliminar espacios en blanco para dificultar la lectura y, en general, hacer cosas complicadas para dificultar el seguimiento de lo que está pasando. No proporciona un nivel de seguridad serio como lo haría la encriptación "verdadera".

El cifrado puede seguir varios modelos, uno de los cuales es el método "secreto", llamado cifrado de clave privada en el que ambas partes tienen una clave secreta. El cifrado de clave pública utiliza una clave compartida de un sentido para encriptar y una clave de destinatario privado para descifrar. Con la clave pública, solo el destinatario debe tener el secreto.


La ofuscación es ocultar o hacer algo más difícil de entender.

Hashing toma una entrada, la ejecuta a través de una función y genera una salida que puede ser una referencia a la entrada. No es necesariamente único, una función puede generar el mismo resultado para diferentes entradas.

El cifrado transforma la entrada en una salida de una manera única. Hay una correlación de uno a uno, por lo que no hay pérdida potencial de datos ni confusión: la salida siempre se puede transformar de nuevo en la entrada sin ambigüedad.


La ofuscación simplemente hace que sea más difícil entender algo al intruducir técnicas para confundir a alguien. Los ofuscadores de código generalmente hacen esto al renombrar cosas para eliminar cualquier cosa significativa de los nombres de variables o métodos. No es similar al cifrado, ya que no se debe descifrar nada para utilizar.

Por lo general, la diferencia entre hash y cifrado es que el hashing generalmente solo emplea una fórmula para traducir los datos a otra forma donde el cifrado utiliza una fórmula que requiere clave (s) para cifrar / descifrar. Ejemplos serían la codificación de la base 64 siendo un algoritmo hash donde md5 es un algoritmo de encriptación. Cualquiera puede deshacerte de los datos codificados de base64, pero no puedes descifrar los datos cifrados de md5 sin una clave.


Todo bien, excepto la ofuscación que no es realmente similar al cifrado, a veces ni siquiera incluye cifras tan simples como ROT13.


Un hash es un algoritmo unidireccional utilizado para comparar una entrada con una referencia sin comprometer la referencia.

Se usa comúnmente en inicios de sesión para comparar contraseñas y también puede encontrarlo en su recibo si compra con tarjeta de crédito. Allí encontrará el número de su tarjeta de crédito con algunos números ocultos, de esta manera puede demostrar con gran propagación que su tarjeta se utilizó para comprar el material, mientras que alguien que busca en la basura no podrá encontrar el número de su tarjeta. .

Un hash muy ingenuo y simple es "Las primeras 3 letras de una cadena" . Eso significa que el hash de "abcdefg" será "abc". Obviamente, esta función no se puede invertir, que es el propósito completo de un hash. Sin embargo, tenga en cuenta que "abcxyz" tendrá exactamente el mismo hash, esto se llama colisión . Entonces otra vez: un hash solo demuestra con cierta propagabilidad que los dos valores comparados son los mismos .

Otro hash muy simple e ingenuo es el 5-módulo de un número, aquí verás que 6,11,16 etc. todos tendrán el mismo hash: 1.

Los algoritmos hash modernos están diseñados para mantener el número de colisiones lo más bajo posible, pero nunca se pueden evitar por completo. Una regla de oro es: cuanto más largo sea tu hash, menos colisiones tendrá.


Una breve respuesta:

Hashing: creación de un campo de verificación en algunos datos (para detectar cuándo se modifican los datos). Esta es una función de una sola dirección y los datos originales no pueden derivarse del hash. Los estándares típicos para esto son SHA-1, SHA256 etc.

Ofuscación: modifique su información / código para confundir a cualquier otra persona (sin protección real). Esto puede o no perder algunos de los datos originales. No hay estándares reales para esto.

Cifrado: utiliza una clave para transformar datos de modo que solo aquellos con la clave correcta puedan entenderlo. Los datos cifrados se pueden descifrar para obtener los datos originales. Los estándares típicos son DES, TDES, AES, RSA, etc.


La ofuscación en la criptografía es la codificación de los datos de entrada antes de que sea hash o encriptado.

Esto hace que los ataques de fuerza bruta sean menos factibles, ya que es más difícil determinar el texto claro correcto.


  • Hashing es una tarea unidireccional de crear un valor a partir de otro. El algoritmo debe intentar crear un valor que sea tan corto y único como sea posible.

  • la ofuscación hace que algo no se pueda leer sin cambiar la semántica. Implica la transformación del valor, la eliminación del espacio en blanco, etc. Algunas formas de ofuscación también pueden ser unidireccionales, por lo que es imposible obtener el valor inicial

  • el cifrado es bidireccional, y siempre hay algo de descifrado que funciona al revés.

Entonces, sí, eres mayormente correcto.