Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)


Posted in Python onDecember 04, 2019

环境:

Python3.7

依赖库:

import datetime
import random
import requests
import hashlib
import json
import base64
from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA256
from Crypto.Cipher import AES

加签:

def sign(signflag,keypath,baseRequest):
 #http请求body
  print(baseRequest)
  #加签标志
  if not signflag: return baseRequest
  else:
   #取请求体中的业务数据
    businessdata = json.dumps(baseRequest["data"])
    #读取私钥(.key格式,可使用openssl或java.keytools产生)
    with open(keypath,'r') as rsaKeyFile:
      rsaKey = rsaKeyFile.read().replace("\n",'')
      print(rsaKey)
    rsaKeyBytes = base64.b64decode(rsaKey)
    print(rsaKeyBytes)
    #SHA256摘要,RSA加密
    priKey = RSA.importKey(rsaKeyBytes)
    signer = PKCS1_v1_5.new(priKey)
    hash_obj = SHA256.new(business_data.encode('utf-8'))
    signature = base64.b64encode(signer.sign(hash_obj))
    print(signature)
    #把签名加进请求体并返回
    baseRequest['sign'] = signature.decode()
    print(baseRequest)
    return baseRequest

验签:

def validata(signflag,cerpath,res):
  if not signflag: return res
  else:
   #取业务数据和签名
    data = res['data']
    sign = res['sign']
    #此处cer已转换成pem格式,使用openssl工具
    #openssl x509 -inform der -pubkey -noout -in xxxxx.cer>xxxxx.pem
    cert = open(cerpath).read().replace("-----BEGIN PUBLIC KEY-----\n","").replace("-----END PUBLIC KEY-----\n","").replace("\n","")
    print(cert)
 #验签逻辑同加签
    pubBytes = base64.b64decode(cert)
    pubKey = RSA.importKey(pubBytes)
    signer = SHA256.new(json.dumps(data).encode("utf-8"))
    verifier = PKCS1_v1_5.new(pubKey)
    return verifier.verify(signer,base64.b64decode(sign))

总结

以上所述是小编给大家介绍的Python3.7基于hashlib和Crypto实现加签验签功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python with statement 进行文件操作指南
Aug 22 Python
Python压缩和解压缩zip文件
Feb 14 Python
python optparse模块使用实例
Apr 09 Python
python删除不需要的python文件方法
Apr 24 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
Apr 27 Python
django如何通过类视图使用装饰器
Jul 24 Python
基于python模拟TCP3次握手连接及发送数据
Nov 06 Python
Django展示可视化图表的多种方式
Apr 08 Python
python plt.plot bar 如何设置绘图尺寸大小
Jun 01 Python
5行Python代码实现一键批量扣图
Jun 29 Python
Python常遇到的错误和异常
Nov 02 Python
Python列表的索引与切片
Apr 07 Python
Python绘制二维曲线的日常应用详解
Dec 04 #Python
使用python远程操作linux过程解析
Dec 04 #Python
基于Python检测动态物体颜色过程解析
Dec 04 #Python
如何用OpenCV -python3实现视频物体追踪
Dec 04 #Python
Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子
Dec 04 #Python
python 画函数曲线示例
Dec 04 #Python
python二元表达式用法
Dec 04 #Python
You might like
PHP学习笔记之三 数据库基本操作
2011/01/17 PHP
WordPress中"无法将上传的文件移动至"错误的解决方法
2015/07/01 PHP
深入浅析php json 格式控制
2015/12/24 PHP
PHP访问数据库集群的方法小结
2016/03/14 PHP
php 使用redis锁限制并发访问类示例
2016/11/02 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
2016/11/03 PHP
PHP使用mysqli同时执行多条sql查询语句的实例
2019/03/22 PHP
基于jquery的blockui插件显示弹出层
2011/04/14 Javascript
JS比较两个时间大小的简单示例代码
2013/12/20 Javascript
jquery动态添加option示例
2013/12/30 Javascript
jquery实现顶部向右伸缩的导航区域代码
2015/09/02 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
2020/03/26 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
2017/01/05 Javascript
vue2中,根据list的id进入对应的详情页并修改title方法
2018/08/24 Javascript
vue中如何实现后台管理系统的权限控制的方法步骤
2019/09/05 Javascript
layui 实现table翻页滚动条位置保持不变的例子
2019/09/05 Javascript
javascript History对象原理解析
2020/02/17 Javascript
基于JavaScript实现贪吃蛇游戏
2020/03/16 Javascript
JavaScript点击按钮生成4位随机验证码
2021/01/28 Javascript
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
Python中的元类编程入门指引
2015/04/15 Python
python打开windows应用程序的实例
2019/06/28 Python
QML使用Python的函数过程解析
2019/09/26 Python
Python Dict找出value大于某值或key大于某值的所有项方式
2020/06/05 Python
如何基于Python Matplotlib实现网格动画
2020/07/20 Python
python IP地址转整数
2020/11/20 Python
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
css3媒体查询中device-width和width的区别详解
2020/03/27 HTML / CSS
利用三角函数在canvas上画虚线的方法
2018/01/11 HTML / CSS
澳大利亚便宜隐形眼镜购买网站:QUICKLENS Australia
2018/10/06 全球购物
添柏岚英国官方网站:Timberland英国
2019/11/28 全球购物
剪枝的学问教学反思
2014/02/07 职场文书
销售员工作检讨书(推荐篇)
2014/10/18 职场文书
2016党员干部廉洁自律心得体会
2016/01/13 职场文书
mysql在项目中怎么选事务隔离级别
2021/05/25 MySQL
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫