Trik je v tom, ze v /etc/shadow nie je (aspon ked sa dobre pamatam
) ciste MD5 hesla. Je tam ulozeny vysledok funkcie crypt(), kde (v tomto pripade) sa v priebehu vypoctu pouziva MD5 ako hashovacia funkcia iterativne (najprv na heslo + salt, potom na vysledok, atd). Na samotny prevod z bitov na string sa pouziva algoritmus velmi podobny base64, akurat pouziva ine znaky (a v inom poradi).
V tvojom prvom priklade (md5 suboru) je na prevod bitov na string pouzity klasicky hexadecimalny zapis, preto su tie dlzky rozne.