PyOpenSSL生成密钥对
-
用
PKey
对象快速生成密钥对from OpenSSL.crypto import PKey, TYPE_RSA pk = PKey() pk.generate_key(type=TYPE_RSA, bits=1024)
-
用
dump_
方法读取密钥对from OpenSSL.crypto import FILETYPE_PEM, dump_publickey, dump_privatekey public = dump_publickey(FILETYPE_PEM, pk) private = dump_privatekey(FILETYPE_PEM, pk) print(public.decode('utf-8')) print(private.decode('utf-8'))
数字签名原理
-
签名过程
-
验证过程
PyOpenSSL实现数字签名
digest
为生成信息摘要用到的Hash
算法,这里用到了SHA-1
算法
-
签名过程
from OpenSSL.crypto import PKey, TYPE_RSA, sign # 生成密钥对 pk = PKey() pk.generate_key(type=TYPE_RSA, bits=1024) # 待签名内容 message = str(input('输入签名内容: ')).encode('utf-8') # 数字签名,digest signature = sign(pkey=pk, data=message, digest='sha1') print(signature)
-
验证过程
如果签名内容与原文不符合,
verify
方法将报错from OpenSSL.crypto import verify, X509 x509 = X509() x509.set_pubkey(pk) verify(x509, signature=signature, data=message, digest='sha1')