Python的rsa签名方法

需要安装pycrypto

pip install pycrypto

python代码

#!-*- coding:utf-8 -*-from Crypto.PublicKey import RSA
from Crypto.Hash import MD5
from Crypto.Signature import PKCS1_v1_5 as pkdef sign(signdata):privatekey = RSA.importKey(ASNKEY)h=MD5.new(signdata)signer = pk.new(privatekey)signn=signer.sign(h)signn=ByteToHex(signn)return signndef ByteToHex(bins):return ''.join( [ "%02x" % x for x in bins ] ).strip()def HexToByte(hexStr):return bytes.fromhex(hexStr)ASNKEY = """-----BEGIN RSA PRIVATE KEY-----
MIIBOgIBAAJBALecq3BwAI4YJZwhJ+snnDFj3lF3DMqNPorV6y5ZKXCiCMqj8OeOmxk4YZW9aaV9
ckl/zlAOI0mpB3pDT+Xlj2sCAwEAAQJAW6/aVD05qbsZHMvZuS2Aa5FpNNj0BDlf38hOtkhDzz/h
kYb+EBYLLvldhgsD0OvRNy8yhz7EjaUqLCB0juIN4QIhAOeCQp+NXxfBmfdG/S+XbRUAdv8iHBl+
F6O2wr5fA2jzAiEAywlDfGIl6acnakPrmJE0IL8qvuO3FtsHBrpkUuOnXakCIQCqdr+XvADI/UTh
TuQepuErFayJMBSAsNe3NFsw0cUxAQIgGA5n7ZPfdBi3BdM4VeJWb87WrLlkVxPqeDSbcGrCyMkC
IFSs5JyXvFTreWt7IQjDssrKDRIPmALdNjvfETwlNJyY
-----END RSA PRIVATE KEY-----"""PCKS8KEY = """-----BEGIN PRIVATE KEY-----
MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAt5yrcHAAjhglnCEn
6yecMWPeUXcMyo0+itXrLlkpcKIIyqPw546bGThhlb1ppX1ySX/OUA4jSakHekNP
5eWPawIDAQABAkBbr9pUPTmpuxkcy9m5LYBrkWk02PQEOV/fyE62SEPPP+GRhv4Q
Fgsu+V2GCwPQ69E3LzKHPsSNpSosIHSO4g3hAiEA54JCn41fF8GZ90b9L5dtFQB2
/yIcGX4Xo7bCvl8DaPMCIQDLCUN8YiXppydqQ+uYkTQgvyq+47cW2wcGumRS46dd
qQIhAKp2v5e8AMj9ROFO5B6m4SsVrIkwFICw17c0WzDRxTEBAiAYDmftk990GLcF
0zhV4lZvztasuWRXE+p4NJtwasLIyQIgVKzknJe8VOt5a3shCMOyysoNEg+YAt02
O98RPCU0nJg=
-----END PRIVATE KEY-----"""header = "<!-- 537606aed546c5ba42c0820ad7fd0d74ee7caf90c232a484d0464b3332c42a9189555aebdba3570fe6566842ba7b7bb88da360f202ae9536a2a12fcdf39600c7 --><ObtainTicketResponse><message></message><prolongationPeriod>607875500</prolongationPeriod><responseCode>OK</responseCode><salt>1508484258274</salt><ticketId>1</ticketId><ticketProperties>licensee=Administrator    licenseType=0   </ticketProperties></ObtainTicketResponse>";
content = "<ObtainTicketResponse><message></message><prolongationPeriod>607875500</prolongationPeriod><responseCode>OK</responseCode><salt>1508484258274</salt><ticketId>1</ticketId><ticketProperties>licensee=Administrator\tlicenseType=0\t</ticketProperties></ObtainTicketResponse>"
print(sign(str.encode(content)))

update20171023:由于以上代码仅在非windows环境先容易实现,win安装pycrypto太费劲了

rsa签名可替换为纯python实现

安装rsa

pip install rsa

等价的签名代码示例

# -*- coding: UTF-8 -*-
import rsadef ByteToHex(bins):return ''.join(["%02x" % x for x in bins]).strip()def HexToByte(hexStr):return bytes.fromhex(hexStr)ASNKEY = """-----BEGIN RSA PRIVATE KEY-----
MIIBOgIBAAJBALecq3BwAI4YJZwhJ+snnDFj3lF3DMqNPorV6y5ZKXCiCMqj8OeOmxk4YZW9aaV9
ckl/zlAOI0mpB3pDT+Xlj2sCAwEAAQJAW6/aVD05qbsZHMvZuS2Aa5FpNNj0BDlf38hOtkhDzz/h
kYb+EBYLLvldhgsD0OvRNy8yhz7EjaUqLCB0juIN4QIhAOeCQp+NXxfBmfdG/S+XbRUAdv8iHBl+
F6O2wr5fA2jzAiEAywlDfGIl6acnakPrmJE0IL8qvuO3FtsHBrpkUuOnXakCIQCqdr+XvADI/UTh
TuQepuErFayJMBSAsNe3NFsw0cUxAQIgGA5n7ZPfdBi3BdM4VeJWb87WrLlkVxPqeDSbcGrCyMkC
IFSs5JyXvFTreWt7IQjDssrKDRIPmALdNjvfETwlNJyY
-----END RSA PRIVATE KEY-----"""
privkey = rsa.PrivateKey.load_pkcs1(ASNKEY)
message = '<ObtainTicketResponse><message></message><prolongationPeriod>607875500</prolongationPeriod><responseCode>OK</responseCode><salt>1508484258274</salt><ticketId>1</ticketId><ticketProperties>licensee=Administrator\tlicenseType=0\t</ticketProperties></ObtainTicketResponse>'
signature = rsa.sign(str.encode(message), privkey, 'MD5')
signature=ByteToHex(signature)
print(signature)

这样基本就能无痛跨平台了

Python的RSA签名相关推荐

  1. Python进行RSA签名,支持SHAWithRSA,SHA256WithRSA

    最近在做开放平台项目,需要编写个语言版本的SDK,其中用到了RSA签名. Python 2.7.10 Python使用私钥生成签名串,支持SHAWithRSA,SHA256WithRSA import ...

  2. python实现RSA加密解密 及 签名验签功能

    本篇写一下python实现RSA的加密解密功能.私钥签名 公钥验签功能. 主要分三部分来介绍 生成私钥和公钥 脚本如下,运行后会生成public.pem(公钥) 和 private.pem(私钥) d ...

  3. php+rsa生成签名sign,PHP 做 RSA 签名 生成订单(支付宝例子)

    /组合签名 $a=time(); $b=substr($a, 1); //生成随机订单号 $orderid= $b.mt_rand(10000,99999); //合作身份者id,以2088开头的16 ...

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

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

  5. python实现rsa数据加密_python实现RSA与AES混合加密

    RSA加密 这是一种非对称加密算法,密钥分为公钥和私钥.通常私钥长度有512bit,1024bit,2048bit,4096bit,长度越长,越安全,但是生成密钥越慢,加解密也越耗时.一般公钥用来加密 ...

  6. python使用RSA加密算法

    上一篇文章介绍了RSA加密原理以及自己的一些理解,现在我们就来实际操作一下,使用python语言如何来实现RSA的加密-解密-签名-验签这一系列过程. ##一.生成公钥.私钥对 使用openssl工具 ...

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

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

  8. Python实现RSA数字签名一

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

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

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

最新文章

  1. JavaScript中函数四种调用模式
  2. 机器人~TCP/IP通信
  3. php开发用户登录模块,使用CodeIgniter开发用户登录注册模块
  4. Xtract 实现 VMware Vsphere 迁主机到 Nutanix cluster
  5. Duilib学习笔记《03》— 控件使用
  6. python画建筑_专题 | Python 绘图入门
  7. 你竟然在公钥中下毒!——如何在RSA公钥中添加后门
  8. python会议室系统预定_会议室预定系统
  9. [图文教程]智学网电脑版下载_电脑上看智学网直播的几种方法
  10. Exchange2010安装指南
  11. 机器学习项目实践总结 -- 24个机器学习最佳入门项目(附源代码)
  12. 为什么mysql填不了数据库_求助,为何我的数据不能写入数据库
  13. 决定一台计算机运行速度快慢的配件是什么,电脑运行慢换什么配件
  14. MySQL语法笔记(自用)
  15. 突发!拼多多程序员自杀
  16. 与活体检测技术结合的人脸识别技术
  17. bean的加载-配置文件的解析
  18. Abaqus打开失败FLEXnet Licensing error:-15,10. System Error: 10061 “WinSock: Connection refused“
  19. 英语学习(八)独立性从句之并列句
  20. Vue + element-ui 背景图片设置

热门文章

  1. 用Notepad++ 宏功能 将json数据转换为EXCEL
  2. 大提顿国家公园美丽风景Mac动态壁纸
  3. 网线制作:网线和水晶头的接法
  4. IE innerHTMLi(转载)
  5. 微信小程序 修改 radio 默认 样式
  6. 微信jsapi支付结果回调错误Tag mismatch
  7. java阶梯计费,机器智能审核阶梯计费方式
  8. MySQL如何统计表格的总行数
  9. 微信上一定有重做贴吧的机会!
  10. 二进制和十进制怎么互转