Python使用RSA+MD5实现数字签名

数字签名主要有防抵赖防篡改两种功能:一是能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名,二是能确定消息的完整性。

作为具体实现,发送报文时,发送方用一个哈希函数(例如MD5SHA-1SHA-256SHA-384SHA-512)从报文文本中生成报文摘要,然后用自己的私钥(由RSA或其他公钥密码体制算法生成,只有发送方本人知道,需保密)对这个摘要进行加密,这个加密后的摘要将作为报文的数字签名和报文一起发送给接收方,接收方首先用与发送方一样的哈希函数从接收到的原始报文中计算出报文摘要,接着再用发送方的公钥(必须与发送方的私钥配对使用,无法对其他人私钥加密的信息进行正确解密)来对报文附加的数字签名进行解密,如果能够正确解密并且这两个摘要相同、那么接收方就能确认该数字签名是发送方的。

下面的代码演示了Python扩展库rsa中数字签名的用法。

>>> import rsa

#生成配对的公钥和私钥

>>> publicKey, privateKey = rsa.newkeys(3000)

>>> message = 'Hello world.'

#签名,也可以指定其他哈希算法

>>> signature = rsa.sign(message.encode(), privateKey, 'MD5')

#验证签名

>>> print(rsa.verify(message.encode(), signature, publicKey))

True

#消息错误

>>> print(rsa.verify('message'.encode(), signature, publicKey))

Traceback (most recent call last):

  File "<pyshell#61>", line 1, in <module>

    print(rsa.verify('message'.encode(), signature, publicKey))

  File "C:\Python 3.5\lib\site-packages\rsa\pkcs1.py", line 322, in verify

    raise VerificationError('Verification failed')

rsa.pkcs1.VerificationError: Verification failed

#签名错误

>>> print(rsa.verify(message.encode(), signature+b'0', publicKey))

Traceback (most recent call last):

  File "<pyshell#63>", line 1, in <module>

    print(rsa.verify(message.encode(), signature+b'0', publicKey))

  File "C:\Python 3.5\lib\site-packages\rsa\pkcs1.py", line 308, in verify

    raise VerificationError('Verification failed')

rsa.pkcs1.VerificationError: Verification failed

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dongfuguo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值