2012-01-17 42 views
7

Tại sao hàm băm sử dụng openssl khác với các hàm băm tôi nhận được trong python?Hàm băm SHA1 khác nhau giữa openssl và hashlib/pycrypto

$ echo "Lorem ipsum" | openssl dgst -sha1 -hex 
(stdin)= d0c05753484098c61e86f402a2875e68992b5ca3 
$ python 
>>> from hashlib import sha1 
>>> sha("Lorem ipsum").hexdigest() 
'94912be8b3fb47d4161ea50e5948c6296af6ca05' 
>>> from Crypto.Hash import SHA 
>>> SHA.new("Lorem ipsum").hexdigest() 
'94912be8b3fb47d4161ea50e5948c6296af6ca05' 

Các chuỗi không tương đương? Tôi thiếu một cái gì đó hiển nhiên?

Chỉnh sửa: Cảm ơn bạn đã phát hiện ra nó. Đã đường ống một tin nhắn đã lưu từ một tệp cũng gặp phải cùng một vấn đề với dòng mới gây phiền nhiễu.

$ cat message | openssl dgst -sha1 -hex 
'keep whacking your head mate, it wont be the same' 
$ echo -n $(cat message) | openssl dgst -sha1 -hex 
'ok, you got me, for now' 
+0

Thông thường, có, hiển nhiên, không thực sự. – Piskvor

Trả lời

24

Bạn đang thiếu các endline rằng echo sẽ nối theo mặc định:

echo "Lorem ipsum" | openssl dgst -sha1 -hex 
(stdin)= d0c05753484098c61e86f402a2875e68992b5ca3 

Với tham số -n, nó sẽ lặp lại chỉ chuỗi mà bạn đã cung cấp cho kết quả mong đợi:

echo -n "Lorem ipsum" | openssl dgst -sha1 -hex 
(stdin)= 94912be8b3fb47d4161ea50e5948c6296af6ca05 
6

vang được đặt một dòng mới vào cuối của chuỗi

>>> sha("Lorem ipsum\n").hexdigest() 
'd0c05753484098c61e86f402a2875e68992b5ca3' 
1

echo thêm ký tự dòng mới vào chuỗi. Tùy chọn -n chặn đường kẻ mới tailing:

> echo -n "Lorem ipsum" | openssl dgst -sha1 -hex 
94912be8b3fb47d4161ea50e5948c6296af6ca05 
Các vấn đề liên quan