我对密码学很陌生,并且在这个问题上停留了 2 天,希望你能帮助我。
我尝试使用 X509 证书的私钥签署 md5 摘要字符串。据我所知,这很好用。现在我尝试使用该 x509 证书的公钥取回该字符串,但我不知道该怎么做。
首先,我使用 OpenSSL 创建了一个 x509 证书和一个私有密钥文件:
openssl req -newkey rsa:1024 -nodes -x509 -days 365 -out signer.pem
这是我尝试的示例代码:
import M2Crypto
import hashlib
def empty_callback ():
return
# md5 hash of params
params = "0045KIABCDEFG"
m = hashlib.md5()
m.update(params)
md = m.digest()
print m.hexdigest()
M2Crypto.Rand.rand_seed (os.urandom (1024))
# sign md5 hash with private key
SignEVP = M2Crypto.EVP.load_key ('privkey.pem')
#Begin signing
SignEVP.sign_init ()
#Tell it to sign our string
SignEVP.sign_update (md)
#Get the final result
StringSignature = SignEVP.sign_final ()
#print the final result
print StringSignature.encode ('base64')
我用这个得到了公钥,但不知道如何使用它。
objX509 = M2Crypto.X509.load_cert ('signer.pem') PubKey = objX509.get_pubkey()
我只找到了如何验证签名字符串,但这不是我需要的。有没有一种方法可以通过使用 signer.pem(公钥)来取回原始 md5 摘要(md)?
我正在使用 M2Cyrpto-0.21.1 和 OpenSSL 1.0.0d,并在 Windows7 上使用 Python27、32 位进行编程。
亲切的问候,法尔科