¿Hay alguna manera de saber qué tipo de encriptación/codificación se está utilizando?
Por ejemplo, estoy probando una aplicación web que almacena la contraseña en la base de datos en un formato cifrado (WeJcFMQ/8+8QJ/w0hHh+0g==
). ¿Cómo puedo determinar qué hashing o encriptación se está utilizando?
Edición: Acabo de ver un script muy bueno llamado hashID. El nombre lo describe bastante bien.
En general, usando la experiencia para hacer conjeturas educadas es como se hacen estas cosas.
Aquí hay una lista con un número muy grande de salidas de hash para que sepas cómo se ve cada una y crear firmas/patrones o simplemente verificar ópticamente.
- [Generador de Hash Crack Hashes en línea](https://www.onlinehashcrack.com/hash-generator.php)
- [Foro de InsidePro Software > Tipos de Hash](https://web.archive.org/web/20160403135857/https://forum.insidepro.com/viewtopic.php?t=8225) (vía Archive.org)
Hay dos cosas *principales* a las que hay que prestar atención primero:
- la longitud del hash (cada función hash tiene una longitud de salida específica)
- el alfabeto utilizado (¿son todas las letras inglesas? ¿números del 0 al 9 y de la A a la F en hexadecimal? ¿qué caracteres especiales hay, si los hay?)
Varios programas de descifrado de contraseñas (John the ripper, por ejemplo) aplican alguna coincidencia de patrones en la entrada para adivinar el algoritmo utilizado, pero esto sólo funciona con hashes genéricos. Por ejemplo, si tomas cualquier salida de hash y giras cada letra por 1, la mayoría de los esquemas de coincidencia de patrones fallarán.
La única manera es adivinar. Con la experiencia, los trabajos de adivinación serán más correctos.
Por ejemplo: Basado en la longitud de la salida: La salida MD5 es de 128 bits, o 16 bytes, la salida SHA1 es de 160 bits, o 20 bytes. Basado en el conjunto de caracteres de la salida: BASE64 produce una salida con caracteres imprimibles.
A fin de cuentas, es el enfoque de prueba y error el que te enseña cómo hacerlo.
La única manera es cuando hay algún metadato que te lo indique. Por ejemplo, últimamente he estado trabajando con PDFs, y el formato incluye un diccionario que contiene el filtro, el algoritmo, el tamaño de la clave, etc. Pero si todo lo que tienes es el texto cifrado, entonces todo lo que tienes es una mancha opaca de datos.