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

作为具体实现,发送报文时,发送方用一个哈希函数(例如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使用RSA+MD5实现数字签名相关推荐

  1. python导出excel文件数字签名_Python使用RSA+MD5实现数字签名

    数字签名主要有防抵赖和防篡改两种功能:一是能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名,二是能确定消息的完整性. 作为具体实现,发送报文时,发送方用一个哈希函数(例如MD5.S ...

  2. python实现RSA数字签名(纯算法实现)

    python实现RSA数字签名(纯算法实现) 一:什么是数字签名 数字签名是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明.它是一种类 ...

  3. Python实现RSA数字签名一

    利用Python实现RSA数字签名的产生和验证过程. 任务1:准备一个私钥文件,一个公钥文件,一个数据文件:   任务2:定义一个函数,能够使用指定的私钥对数据文件进行签 名,并将签名结果输出到文件返 ...

  4. python基于rsa的数字签名实现_OpenSSL和Python实现RSA Key数字签名和验证

    OpenSSL和Python实现RSA Key数字签名和验证,基于非对称算法的RSA Key主要有两个用途,数字签名和验证(私钥签名,公钥验证),以及非对称加解密(公钥加密,私钥解密).本文提供一个基 ...

  5. python md5_python中md5

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! md5的作用是让大容量信息在用数字签名软件签署私人密钥前被压缩成一种保密的格式( ...

  6. python实现rsa加密解密代码_使用python实现rsa算法代码

    RSA算法是一种非对称加密算法,是现在广泛使用的公钥加密算法,主要应用是加密信息和数字签名. 维基百科给出的RSA算法简介如下: 假设Alice想要通过一个不可靠的媒体接收Bob的一条私人讯息.她可以 ...

  7. Python的RSA签名

    Python的rsa签名方法 需要安装pycrypto pip install pycrypto python代码 #!-*- coding:utf-8 -*-from Crypto.PublicKe ...

  8. python实现rsa加密源代码_python实现RSA加密(解密)算法

    RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准. 今天只有短的RSA钥匙才可能被强力方式解破.到2008年为止,世界上还没有任何可靠 ...

  9. python下RSA加密解密以及跨平台问题

    项目合作需要,和其他网站通信,消息内容采用RSA加密方式传递.之前没有接触过RSA,于是两个问题出现了: 声明: 环境WIN 7 + python 2.6.6 RSA格式:PEM 一.Python下R ...

最新文章

  1. spark编程基础--2.2scala基础知识
  2. python练习册 每天一个小程序 第0009题
  3. 跳表(SkipList)设计与实现(java)
  4. 肾炎治疗有效方(湿热壅滞三焦,气机不利)
  5. Yii学习笔记之二(使用gii生成一个简单的样例)
  6. why configuration from BSP application is loaded
  7. 第五天 断点续传和下载
  8. [BUGKU][CTF][PWN][2020] PWN writeup
  9. 数据库临时表空间设置
  10. C++新特性探究(四):Raw String Literals
  11. 播放音乐的html语言,Html5音频和视频播放示例详解
  12. (转载)计算机英语名词简释
  13. java jbutton_Java JButton按钮使用
  14. 戴尔win10计算机打不开,戴尔Win10系统摄像头打不开怎么办?
  15. 端游体验服服务器维护怎么办,经典区高清天堂体验服维护公告
  16. [026]文本分类之SVM
  17. 数据库设计的基本步骤
  18. 高德地图1008INVALID_USER_SCODE错误
  19. 10、(加强版)本金10000元存入银行,年利率是千分之三。每过一年,将本金和利息相加作为新的本金。计算五年后,获得的本金是多少?
  20. 大数据是数字经济时代最关键的生产资料

热门文章

  1. 2 数据源配置_[Mybatis]-[基础支持层]-数据源信息-数据源详解
  2. base64 pdf解码无法打开_微信小程序使用echarts导出PDF
  3. 利用计算机打字教学设计,《争当打字小能手》教学设计方案
  4. linux操作系统源码分析,linux操作系统源代码详细分析.doc
  5. sftp api java_SFTP例子2----使用JSch实现SFTP文件传输
  6. 基于JAVA+SpringMVC+Mybatis+MYSQL的快递预取件查询系统
  7. php导入img,PHP 转PDF(Img)
  8. java concurrent int_Java高级特性系列--Concurrent
  9. 内存映射处理大文件[转载]
  10. 2011 ACM 0和1思想