专栏首页Python小屋Python使用RSA+MD5实现数字签名

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

本文分享自微信公众号 - Python小屋(Python_xiaowu),作者:董付国

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-11-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python代码调试之异常回溯

    当发生异常时,Python会回溯异常,给出大量的提示,可能会给程序员的定位和纠错带来一定的困难,这时可以使用sys模块的exc_info()函数来回溯最近一次异...

    Python小屋屋主
  • 一行Python代码统计词频

    问题描述:给定一段文本,统计其中每个单词的出现频率。 技术要点:扩展库jieba的cut()函数,标准库collections中的Counter类。 参考代码:...

    Python小屋屋主
  • 小议Python列表和元组中的元素地址连续性

    众所周知,在Python中字典和集合依赖元素哈希表来存储,并不存在传统意义上的所谓元素“顺序”,当然,如果需要一个有序的字典可以使用collections模块提...

    Python小屋屋主
  • 基于Tomcat7、Java、WebSocket的服务器推送聊天室

    链接:https://blog.csdn.net/u012562943/article/details/51447074

    用户5224393
  • js关键词变色,数组打乱,数组去重的实现和封装

    今天,把自己之前封装过的一部分小功能操作分享出现,都是一些可以说是比较常用,实现起来比较简单,代码又比较少的一些功能或操作,比如关键词变色,数组打乱,数组去重等...

    守候i
  • 涅槃 | 心智成长之路1

    -------写 在 前 面 --------- 研究生毕业至今也已经超过4年,也过了三十而立的年龄。工作中少了刚入职时候的韧劲,更多的是提升工作效率...

    用户1390885
  • nop 添加字段

    wfaceboss
  • 微信小程序的出现给前端带来了什么

    这是一个前端飞速发展的时代,我比较喜欢将其类比为欧洲列强疯狂殖民扩张的那段历史。JavaScript,得益于所有平台都必须具有浏览器这一特点,已经成为了事实上目...

    逆葵
  • 基于WebSocket的网页端即时通讯技术

    本博客介绍基于html5的Websocket网页即时通讯技术,前端开发采用ExtJS前端框架 JavaEE框架:Mybatis、SpringMVC 先去...

    用户1208223
  • 第149天:javascript中this的指向详解

    js中的this指向十分重要,了解js中this指向是每一个学习js的人必学的知识点,今天没事,正好总结了js中this的常见用法,喜欢的可以看看:

    半指温柔乐

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动