El formato más común para hashes en sistemas similares a Unix tiene la forma $ALG$SALT$OUTPUT
donde ALG es un número pequeño que identifica el algoritmo, SALT es una sal para el hash y OUTPUT es la salida de la función hash. SALT y OUTPUT están codificados en base64.
El algoritmo 1 es "criptografía MD5", una construcción basada en la iteración de la función hash MD5. Este algoritmo no fue (y aún no está, por lo que sé) definido por un estándar formal. Fue introducido por Poul-Henning Kamp en FreeBSD en 1994 .
Las API normales agregan un salt. La implementación original forzó una sal de 48 bits. El recuento de iteraciones se fijó en 2477, que el autor realizó una prueba de referencia de 34 µs en una PC de gama alta de la época. Su hash tiene un salt vacío, lo cual es inusual y requiere que el desarrollador o administrador que lo configuró omita las herramientas habituales y probablemente llame directamente a una función de biblioteca.
Los sistemas Linux actuales generalmente usan algoritmos 5 y 6 , que se basan en la iteración de SHA-256 y SHA-512 respectivamente. Estas construcciones se basan ampliamente en el mismo principio que PBKDF2 , pero calculan el hash iterado de manera diferente.
Puede encontrar una gran cantidad de información sobre los algoritmos de hash de contraseña en la documentación de la biblioteca passlib , y Por supuesto, la biblioteca te da implementaciones de Python. Este algoritmo es passlib.hash.md5_crypt
.