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

作为具体实现,发送报文时,发送方用一个哈希函数(例如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. 总以为自己走的很快,才发现自己是走的最慢的那个
  2. 下列有关mysql数据库中的null值_MySQL数据库中与 NULL值有关的问题
  3. 优先级反转和解决方法
  4. [COCI2015]ZGODAN
  5. C++程序员必需的修养
  6. meta你到底了解多少
  7. zabbix添加表达式
  8. 6个强大的AngularJS扩展应用
  9. mysql not regexp_Mysql必知必会——使用正则表达式搜索(REGEXP)
  10. Android反编译工具dex2jar的使用
  11. WordPress 速度优化的完整指南
  12. c语言 long double输出,printf和long double
  13. 斐波那契数列 一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?
  14. 计算机四级少选给分吗,计算机四级:考高分的有效途径(转载)
  15. 函数 over() 的含义
  16. BZOJ2565最长双回文串——manacher
  17. 【视频学习】完结 王霸胆 -美式发音28天完美养成计
  18. arm synchronization primitives
  19. Spring IOC详解 以及 Bean生命周期详细过程 可以硬刚面试官的文章
  20. windows权限管理

热门文章

  1. python输入数字是什么类型的游戏_“数字炸弹”——一个练习Python基础知识的小游戏...
  2. Java多个注解合并_Java注解合并,注解继承
  3. war包部署vue_又一干货实战,spring boot2:以 War 包的形式部署
  4. php判断网址包含字符,php中判断一个字符串包含另一个字符串的方法
  5. Linux 切mms数据流,libmms MMSH Server响应解析缓冲区溢出漏洞
  6. dns日志级别 linux,linux下DNS服务器视图view及日志系统详解
  7. 希尔排序python 简书_数据结构_排序_直接插入+希尔排序
  8. java基本数据类型以及相关内容总结
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的养老院管理系统
  10. 基于JAVA+Servlet+JSP+MYSQL的物流管理系统