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中zip()函数用法实例教程
Jul 31 Python
Python基础教程之内置函数locals()和globals()用法分析
Mar 16 Python
python3库numpy数组属性的查看方法
Apr 17 Python
Python实战购物车项目的实现参考
Feb 20 Python
python字符串和常用数据结构知识总结
May 21 Python
python matplotlib库绘制散点图例题解析
Aug 10 Python
解决python replace函数替换无效问题
Jan 18 Python
Windows 下python3.8环境安装教程图文详解
Mar 11 Python
PyQt5+Pycharm安装和配置图文教程详解
Mar 24 Python
如何基于Python Matplotlib实现网格动画
Jul 20 Python
Python实现敏感词过滤的4种方法
Sep 12 Python
python数字图像处理之对比度与亮度调整示例
Jun 28 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自动更新新闻DIY
2006/10/09 PHP
如何用php生成扭曲及旋转的验证码图片
2013/06/07 PHP
在Laravel5中正确设置文件权限的方法
2019/05/22 PHP
js正则表达式中test,exec,match方法的区别说明
2014/01/29 Javascript
使用Jquery获取带特殊符号的ID 标签的方法
2014/04/30 Javascript
单元选择合并变色示例代码
2014/05/26 Javascript
JS实现不使用图片仿Windows右键菜单效果代码
2015/10/22 Javascript
利用Mongoose让JSON数据直接插入或更新到MongoDB
2017/05/03 Javascript
Bootstrap多级菜单的实现代码
2017/05/23 Javascript
详解VUE 定义全局变量的几种实现方式
2017/06/01 Javascript
jQuery实现的表格前端排序功能示例
2017/09/18 jQuery
AngularJS 控制器 controller的详解
2017/10/17 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
2018/04/09 Javascript
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
在vue里使用codemirror遇到的问题
2018/11/01 Javascript
Vue作用域插槽实现方法及作用详解
2020/07/08 Javascript
解决VUEX的mapState/...mapState等取值问题
2020/07/24 Javascript
[01:32]2016国际邀请赛中国区预选赛IG战队首日赛后采访
2016/06/27 DOTA
[40:53]完美世界DOTA2联赛PWL S3 Magma vs DLG 第二场 12.18
2020/12/20 DOTA
python缩进区别分析
2014/02/15 Python
python完成FizzBuzzWhizz问题(拉勾网面试题)示例
2014/05/05 Python
python中实现数组和列表读取一列的方法
2018/04/03 Python
python ftp 按目录结构上传下载的实现代码
2018/09/12 Python
python取数作为临时极大值(极小值)的方法
2018/10/15 Python
详解PyCharm+QTDesigner+PyUIC使用教程
2019/06/13 Python
Python求两个字符串最长公共子序列代码实例
2020/03/05 Python
python 贪心算法的实现
2020/09/18 Python
Html5新特性用canvas标签画多条直线附效果截图
2014/06/30 HTML / CSS
编辑硕士自荐信范文
2013/11/27 职场文书
口头翻译求职人自荐信
2013/12/07 职场文书
中层干部岗位职责
2013/12/18 职场文书
2014年3.15团委活动总结
2014/03/16 职场文书
公司合作意向书
2014/04/01 职场文书
工程质量保证书
2015/05/09 职场文书
Python实现为PDF去除水印的示例代码
2022/04/03 Python
利用Apache Common将java对象池化的问题
2022/06/16 Servers