2009-12-03 40 views
6

Tôi đang bối rối là tại sao sHA1s riêng lợi nhuận sauTại sao Perl và/bin/sha1 lại cho kết quả khác nhau?

$ 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 - 

Cái nào là đúng? Am/I/làm điều đó sai?

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

Bạn có thể xem tiêu hóa là đúng trong sự kế thừa (Digest::SHA)

+2

Trong những trường hợp này, luôn luôn nhìn vào chuỗi trước khi bạn cung cấp cho họ sang bước tiếp theo để đảm bảo họ là những điều tương tự trước khi bạn làm tiêu hóa. Lưu nó vào một tập tin và hexdump nó nếu bạn có. –

Trả lời

19

Cả hai đều đúng. Lệnh echo của bạn bao gồm một dòng mới ở cuối. (và chuỗi perl không) Hãy thử với echo -n ...

3

Đây là một sai lầm thường xuyên và tôi đã thực hiện nhiều lần. Lệnh echo cũng trả về một dòng mới.

+1

echo không phải là "trả lại" một dòng mới. Nó xuất ra một dòng mới, và (có thể) trả về 0. –

9

Perl đang cung cấp cho bạn hàm băm của chuỗi ký tự mà bạn đã nhập, trong khi tiếng vọng đang thêm một dòng mới. Nếu bạn nói với echo để không thêm một dòng mới, bạn sẽ nhận được kết quả tương tự:

drewfus:~$ perl -MDigest::SHA1 -E'say Digest::SHA1::sha1_hex("foo");' 
0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33 
drewfus:~$ echo -n "foo" | sha1sum 
0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33 - 
Các vấn đề liên quan