Почему md5 не совпадает с выводом Perl's Digest :: MD5? - PullRequest
4 голосов
/ 16 февраля 2010

Запуск функции md5 из терминала ksh не совпадает с выводом простого сценария Perl.

В терминале я запускаю:

echo -n abc | md5
62fecf21103616856d72e6ffc9bcb06b

Если я запускаю его с помощью Perl:

use Digest::MD5 qw(md5_hex);

foreach (@ARGV) {
   print "Digest is ", md5_hex($_), "\n";
}
exit

Я получаю

./perl_test.sh abc
Digest is 900150983cd24fb0d6963f7d28e17f72

Во всех примерах, которые я вижу, и в примере самой функции md5 Perl выглядит правильно, а тот, который использует только Ksh, не делает:

md5 -x
MD5 test suite:
MD5 ("") = d41d8cd98f00b204e9800998ecf8427e
MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661
MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72

Ответы [ 4 ]

5 голосов
/ 16 февраля 2010

используйте более портативный printf

printf "abc" | md5
4 голосов
/ 16 февраля 2010

Ваш echo не распознает опцию -n, поэтому вы хэшируете строку '-n abc \ n'.

1 голос
/ 16 февраля 2010

В дополнение к ответу GregS , несколько примеров:

$ md5 -s "-n abc"$'\012' # \012 = newline
MD5 ("-n abc
") = 62fecf21103616856d72e6ffc9bcb06b

И

$ md5 -s "abc"
MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
0 голосов
/ 27 февраля 2010

Когда я сталкиваюсь с этими проблемами, я обычно делаю что-то вроде этого, чтобы проверить, что у меня выводится (например, показаны вкладки, пробелы и т. Д.)

$ echo abc | hexdump -c
0000000   a   b   c  \n                                                
0000004
...