M2CryptoでMessage Digest
# coding=utf-8 from binascii import hexlify import M2Crypto from M2Crypto.EVP import MessageDigest import hashlib # ファイルのsha1ハッシュ値の計算(hashlib) sha1 = hashlib.sha1() sha1.update(open('file.txt', 'r').read()) print sha1.hexdigest() # => 03cfd743661f07975fa2f1220c5194cbaff48451 # ファイルのsha1ハッシュ値の計算(M2Crypto) sha1 = MessageDigest('sha1') sha1.update(open("file.txt").read()) print hexlify(sha1.digest()) # => 03cfd743661f07975fa2f1220c5194cbaff48451 # file.txtのハッシュ値にdsakey.pemファイルにある秘密鍵を利用して、電子署名を作成 dsa = M2Crypto.DSA.load_key('dsaprivatekey.pem', callback=lambda x: 'password') sha1 = MessageDigest('sha1') sha1.update(open("file.txt").read()) with open('dsasign.bin', 'wb') as f: f.write(dsa.sign_asn1(sha1.digest())) # dsasign.binファイルの電子署名を検証する sha1 = MessageDigest('sha1') sha1.update(open("file.txt").read()) with open('dsasign.bin', 'rb') as f: print dsa.verify_asn1(sha1.digest(), f.read())
opensslの以下のコマンドとだいたい同じはず
** sha1ハッシュ値を計算 openssl dgst -sha1 file.txt ** file.txtのハッシュ値にdsaprivatekey.pemファイルにある秘密鍵を利用して、電子署名を作成 openssl dgst -dss1 -sign dsaprivatekey.pem -out dsasign.bin file.txt ** 電子署名を検証する openssl dgst -dss1 -prverify dsaprivatekey.pem -signature dsasign.bin file.txt