Si sé el texto original "12345" que se codifica como "Tut0nlFFZ9sLVhPE5x81lQ ==", ¿cómo puedo identificar el algoritmo de hash?
En observación, esto se parece a la codificación base64 (tenga en cuenta que esto no es un hash, es una cadena codificada). Puedo decir esto ya que sé que este algoritmo de hash rellena el final de la cadena con =
según sea necesario. Otros signos indicativos pueden ser del uso de ciertos caracteres en la cadena. Aprenderás esto simplemente exponiéndote a los ejemplos existentes y leyendo sobre los diversos algoritmos de codificación que hay.
La cadena codificada en base64 de 12345
es en realidad MTIzNDU=
, no lo que proporcionó. Decodificando los rendimientos de cadena proporcionados: NëtžQEgÛVÄç5•
. La alta entropía aquí indica que esto es probablemente el resultado de algún algoritmo de cifrado. Dado que el punto de un buen algoritmo de cifrado es la incapacidad de determinarlo a partir de datos aleatorios, a menudo no es fácil descubrir qué algoritmo se usó y normalmente tendría que recurrir a esfuerzos de fuerza bruta.
Suponiendo que este es un tipo de ejercicio en el que está seguro de que su entrada se resuelve y se le ha pedido que determine la contraseña utilizada para cifrarla, puede utilizar la fuerza bruta utilizando un método que, después de probar una contraseña, verifica si la salida es de hecho 12345
. De esta manera usted realmente puede verificar que ha adivinado la contraseña correcta. Buena suerte!
El "valor cifrado" es Base64 : esta es una codificación para bytes arbitrarios en caracteres imprimibles . En Base64, cada tres bytes de entrada se convierten en cuatro caracteres; los caracteres posibles son letras (mayúsculas y minúsculas), dígitos, '+' y '/'. Además, puede haber uno o dos signos '=' finales, de modo que la longitud total sea un múltiplo de 4. Estos signos '=' son un sorteo muerto de Base64.
En su caso, el "valor cifrado" es la codificación Base64 de una secuencia de 16 bytes. Estos 16 bytes, en hexadecimal, serían 4eeb749e514567db0b5613c4e71f3595
. En el contexto de las funciones hash, 16 bytes generalmente significan MD4 o MD5. Pero hay muchas variantes posibles. Por ejemplo, si ese "valor cifrado" aparece en una "base de datos de usuarios" (por ejemplo, una contraseña con hash), entonces es muy posible que la entrada esté "salted" de alguna manera con otros campos específicos del usuario. Para verificarlo, intente dar la misma contraseña a dos usuarios distintos; Si obtienen distintos hashes, se aplica salting (posiblemente con el nombre de usuario o algún otro campo).
Tales valores no aparecen solos; están en un contexto : lo encontró en un archivo o base de datos, vinculado con alguna aplicación o software de servidor. Las claves sobre el tipo de cifrado de la función hash se encuentran en ese contexto.
Está utilizando el hashing y la codificación y el cifrado al mismo tiempo para la misma cosa, mientras que son cosas completamente diferentes. En pocas palabras:
Su mejor manera de averiguarlo es tomar todos los algoritmos diferentes y hash / codificar su texto sin formato y ver cuál de los resultados coincide. Tengo la fuerte sensación de que la codificación es BASE64. Ahora puede ser que lo que hicieron es: BASE64 (hash (x)), por lo que lo mejor es descifrar BASE64, tomar la representación binaria y compararla con diferentes resultados de hashing de su cadena de texto sin formato.
En primer lugar, permítame señalar que Tut0nlFFZ9sLVhPE5x81lQ==
es una codificación base64 de la cadena "NtQEgV5" y no es un valor resultante de una función de hashing.
En segundo lugar, dado que su pregunta sugiere que la diferencia entre encriptación y hashing no está clara, le sugiero que analice estas dos preguntas de SO antes de continuar explorando el tema. ( one y two ).
De vuelta a la pregunta, para detectar qué función de hash se ha utilizado, puede echar un vistazo al valor de hash, ya que los algoritmos de hash suelen tener una salida de longitud fija. Por ejemplo, MD5 produce un valor de 128 bits (32 caracteres hexadecimales), mientras que SHA1 produce un valor de 160 bits (40 caracteres hexadecimales). Vamos a verlo en acción:
827ccb0eea8a706c4c34a16891f84e7b
y el hash SHA1 es 8cb2237d0679ca88db6464eac60da96345513964
e807f1fcf82d132f9bb018ca6738a19f
y el hash SHA1 es 01b307acba4f54f55aafc33bb06bbbf6ca803e9a
. Como puede ver, los hashes tienen la misma longitud que los calculados en la cadena más corta.
Incluso si tiene acceso tanto al texto claro como a su valor de hash, es posible que encontrar el algoritmo utilizado no sea tan sencillo como parece.
Si la implementación utiliza un único algoritmo de hash (lo cual es una práctica común), la detección del correcto es trivial y se puede hacer con aplicaciones de libre acceso (por ejemplo, MD5Decrypter ). Tenga en cuenta que algunas aplicaciones pueden implementarlo de manera diferente:
base64(md5($text))
): la decodificación de esquemas comunes se puede lograr con una de las muchas herramientas disponibles de forma gratuita.
gnzLDuqKcGxMNKFokfhOew==
sha1(md5($text))
): descubra uno por uno hasta que se detecte el último También es posible averiguar qué algoritmo se está utilizando al conocer la tecnología subyacente: las contraseñas de Windows pueden ser hashes LM o NTLM, las credenciales encontradas en una base de datos MySQL pueden (no son comunes) con la función PASSWORD () de MySQL, etc.
Lea otras preguntas en las etiquetas hash