Los passwords en sistemas Linux/UNIX se guardan en el archivo /etc/shadow con el siguiente formato:

$ID$SALT$ENCRYPTED
  • ID: Indica el tipo de cifrado
  • SALT: Es un string aleatorio para aumentar la dificultad de un ataque de diccionario
  • ENCRYPTED: Es el hash del password

Estos son los tipos hash utilizados comúnmente en Linux:

Tipo de Hash ID Longitud
MD5 $1 22
bcrypt $2b 53
SHA-256 $5 43
SHA-512 $6 86

Generar hash desde Bash usando Python

Los siguientes ejemplos generan un hash para el password MySecretPassword:

MD5

python -c "import random,string,crypt;
randomsalt = ''.join(random.sample(string.ascii_letters,8));
print crypt.crypt('MySecretPassword', '\$1\$%s\$' % randomsalt)"

$1$YjOzcqrf$Zqx4sx5CQRuEIFCdOLAJV0

bcrypt / blowfish

# Usando 15 iteraciones
python -c "import bcrypt; print(bcrypt.hashpw('MySecretPassword', bcrypt.gensalt(15)))"

$2b$15$b1H.m7y98wLbv3XDtgFaLOB4Ak6DQGYqiihxbZWSBLx3QH1SekqHS

SHA-256

python -c "import random,string,crypt;
randomsalt = ''.join(random.sample(string.ascii_letters,8));
print crypt.crypt('MySecretPassword', '\$5\$%s\$' % randomsalt)"

$5$LgsPuaeR$OCtm.3tpbS/wyOZAIy6dsVNP4x0GyohyGebkIz15e88

SHA-512

python -c "import random,string,crypt;
randomsalt = ''.join(random.sample(string.ascii_letters,8));
print crypt.crypt('MySecretPassword', '\$6\$%s\$' % randomsalt)"

$6$EgITZWGD$5m1B7eWBH32Crj3COaT8.v3b4XFBvHVNcWMRLzoVkXHbmT6rC4Ot1uwuupYFHPLAoxMfXlB0LO8udusP2hnDp/

Referencias