Como @otus notou, os hashes não são raw MD5 - crypt () usa MD5Crypt , que envolve algumas dúzias de iterações MD5 (a quantidade exata realmente difere com base no hash em si), alguns bitshifting e alguns pó de pixie.
/* Then just as many characters of the MD5(pw,salt,pw) */
/* On a 60 Mhz Pentium this takes 34 msec */
/* Then something really weird... */
Em suma, não é algo que você possa reproduzir usando o md5sum
básico, mas sim chamando a libc crypt (3) ou usando ferramentas como mkpasswd
que fazem o mesmo:
# echo -n toor | openssl passwd -stdin -1 -salt /M
$1$/M$5GK8.h6z8o0WQLEOWC.YI/
Além disso, tanto o sal como o hash na saída crypt () são codificados usando uma Base64 ligeiramente modificada (6 bits por byte), enquanto md5sum
imprime o hash em hexadecimal (4 bits por byte), de modo que responde pela diferença no comprimento da saída.