2

M2Crypto と OpenSSL CLI は同じデジタル署名を作成していないようです。Pythonで使用するコードは次のとおりです。

import M2Crypto
rsa = M2Crypto.RSA.load_key("privkey.pem")
open("sig_m2crypto", "w").write(rsa.sign("md5-digest", "md5"))

OpenSSL のコマンド ラインは次のとおりです。

echo "md5-digest" | openssl rsautl -sign -inkey privkey.pem > sig_openssl

同じ入力では、 と の結果sig_m2cryptosig_openssl常に異なります。重要なのは、M2Crypto と OpenSSL を使用して生成された署名を検証できないこと、およびその逆であることです。

相互に互換性を持たせないコードに欠けているものはありますか?

追加情報: Windows 7 で M2Crypto 0.21.1 と OpenSSL 1.0.0 を使用しています。

4

1 に答える 1

5

これを試して:

echo -n "test" | openssl md5 -sign privkey.pem > sig_openssel

(これ-nは、文字列の後に改行が追加されないようにするために重要です)*

そしてpython側で:

import M2Crypto
import hashlib
rsa = M2Crypto.RSA.load_key("privkey.pem")
digest = hashlib.new('md5', 'test').digest()
open("sig_m2crypto", "w").write(rsa.sign(digest, "md5"))

これで、署名は同一になるはずです。

署名ファイルの内容を実際に確認するには、次を使用できます。

openssl rsautl -inkey privkey.pem -verify -in sig_m2crypto -asn1parse

openssl rsautl -inkey privkey.pem -verify -in sig_m2crypto -raw -hexdump

正しい署名には、使用されたダイジェストに関する情報が含まれています。openssl rsautl -sign ...

*編集:少なくともLinuxでは、Windowsを使用しているため、必要かどうかはわかりません。

于 2012-06-27T13:12:34.880 に答える