Почему Perl и / bin / sha1 дают разные результаты? - PullRequest
6 голосов
/ 04 декабря 2009

Я запутался, почему следующее возвращает отдельные sHA1s

$ perl -MDigest::SHA1 -E'say Digest::SHA1::sha1_hex("http://i.aultec.com/v/8066/Originals/1FTVX12585NA9832010.jpg");'
e1133fa3b7ea0bfb8ffa4d877932ed6c6fa10cef

$ echo "http://i.aultec.com/v/8066/Originals/1FTVX12585NA9832010.jpg" | sha1sum 
5c3731e83ae0184ed93b595b9f5604863dd331e6  -

Какой из них прав? Я / я / делаю это неправильно?

$ perl -MDigest::SHA -E'say Digest::SHA::sha1_hex("http://i.aultec.com/v/8066/Originals/1FTVX12585NA9832010.jpg");'
e1133fa3b7ea0bfb8ffa4d877932ed6c6fa10cef

Вы видите, что дайджест находится прямо в преемнике (Digest::SHA)

Ответы [ 3 ]

19 голосов
/ 04 декабря 2009

Оба правы. Ваша команда эха включает в конце новую строку. (а строка perl этого не делает) Попробуйте с echo -n ...

9 голосов
/ 04 декабря 2009

Perl дает вам хэш введенной вами буквальной строки, тогда как echo добавляет новую строку. Если вы скажете echo не добавлять новую строку, вы получите тот же результат:

drewfus:~$ perl -MDigest::SHA1 -E'say Digest::SHA1::sha1_hex("foo");'
0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33
drewfus:~$ echo -n "foo" | sha1sum
0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33  -
3 голосов
/ 04 декабря 2009

Это такая частая ошибка, и я делал это много раз. Команда echo также возвращает символ новой строки.

...