Ostanio napisałem sobie na szybko skrypt do sprawdzania i porównywania sum MD5 plików w systemie, ale jak porównałem rezultaty z ‘ręczną robotą’ (bez skojarzeń! ;) ) to się okazało, że nowy skrypt nie działa. Ponieważ nie mógł to być przypadek, że wszystkie sumy zostały źle obliczone, to postanowiłem sprawdzić inne narzędzia:
$ php -r "echo md5('test1234');"
16d7a4fca7442dda3ad93c9a726597e4
echo test1234|md5sum|awk '{print $1}'
eddc02b200ae8a15a7e6b44ac05bf5f1
W PHP działa, więc jaki jest powód? Rozwiązanie jest dość proste. Użyłem komendy ‘echo’ do drukowania znaków, które później miały być hashowane w MD5. Domyślnie ‘echo’ dodaje znak nowej linii (\n) do tych znaków i dlatego md5sum źle (dobrze!) przeliczał. Aby uniknąć tego kłopotu należy dodać przełącznik ‘-n’ do echo, który – przedrukowując za MANualem – nie wypisuj znaku nowej linii na końcu wiersza.
$ php -r "echo md5('test1234');"
16d7a4fca7442dda3ad93c9a726597e4
$ echo -n test1234|md5sum|awk '{print $1}'
16d7a4fca7442dda3ad93c9a726597e4
No i wszystko działa :)
