7

openssl を使用したハッシュが、Python で取得したものと異なるのはなぜですか?

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

文字列は同等ではありませんか? 明らかな何かが欠けていますか?

編集:見つけてくれてありがとう。同じ迷惑な改行の問題に悩まされているファイルから保存されたメッセージをパイプしていました。

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

3 に答える 3

25

echoデフォルトで追加されるエンドラインがありません:

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

パラメータを使用すると、指定した文字列のみ-nがエコーされ、期待される結果が得られます。

echo -n "Lorem ipsum" | openssl dgst -sha1 -hex
(stdin)= 94912be8b3fb47d4161ea50e5948c6296af6ca05
于 2012-01-17T17:02:01.993 に答える
6

echo は文字列の最後に改行を入れています

>>> sha("Lorem ipsum\n").hexdigest()
'd0c05753484098c61e86f402a2875e68992b5ca3'
于 2012-01-17T17:01:16.457 に答える
1

echo文字列に改行文字を追加します。オプション-nは、末尾の改行を抑制します。

> echo -n "Lorem ipsum" | openssl dgst -sha1 -hex
94912be8b3fb47d4161ea50e5948c6296af6ca05
于 2012-01-17T17:03:11.730 に答える