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高级应用实例对比:高效计算大文件中的最长行的长度
Jun 08 Python
python3 kmp 字符串匹配的方法
Jul 07 Python
python读取Excel实例详解
Aug 17 Python
Python正则表达式指南 推荐
Oct 09 Python
python 读取Linux服务器上的文件方法
Dec 27 Python
python 获取utc时间转化为本地时间的方法
Dec 31 Python
python根据时间获取周数代码实例
Sep 30 Python
django中间键重定向实例方法
Nov 10 Python
Python flask路由间传递变量实例详解
Jun 03 Python
如何利用Python写个坦克大战
Nov 18 Python
python 根据列表批量下载网易云音乐的免费音乐
Dec 03 Python
python爬取网页版QQ空间,生成各类图表
Jun 02 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
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
2011/12/19 PHP
测试php函数的方法
2013/11/13 PHP
laravel中的一些简单实用功能
2018/11/03 PHP
用js遍历 table的脚本
2008/07/23 Javascript
javascript中[]和{}对象使用介绍
2013/03/20 Javascript
详谈javascript中DOM的基本属性
2015/02/26 Javascript
基于JS代码实现实时显示系统时间
2016/06/16 Javascript
canvas实现图像放大镜
2017/02/06 Javascript
socket.io学习教程之基本应用(二)
2017/04/29 Javascript
import与export在node.js中的使用详解
2017/09/28 Javascript
vue插件mescroll.js实现移动端上拉加载和下拉刷新
2019/03/07 Javascript
WebSocket的简单介绍及应用
2019/05/23 Javascript
el-select数据过多懒加载的解决(loadmore)
2019/05/29 Javascript
Layui点击图片弹框预览的实现方法
2019/09/16 Javascript
[01:45]IMBATV TI4前线报道-选手到达
2014/07/07 DOTA
[06:16]《DAC最前线》之地区预选赛全面回顾
2015/01/19 DOTA
Python代理抓取并验证使用多线程实现
2013/05/03 Python
解决python3 urllib中urlopen报错的问题
2017/03/25 Python
python实现基于SVM手写数字识别功能
2020/05/27 Python
python时间日期函数与利用pandas进行时间序列处理详解
2018/03/13 Python
详解Django 中是否使用时区的区别
2018/06/14 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
2019/07/04 Python
tensorflow 环境变量设置方式
2020/02/06 Python
解决pytorch-yolov3 train 报错的问题
2020/02/18 Python
python numpy库linspace相同间隔采样的实现
2020/02/25 Python
python 弧度与角度互转实例
2020/04/15 Python
Python实现aes加密解密多种方法解析
2020/05/15 Python
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
2021/03/14 PHP
详解CSS3+JS完美实现放大镜模式
2020/12/03 HTML / CSS
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
2013/01/31 HTML / CSS
adidas泰国官网:adidas TH
2020/07/11 全球购物
什么是动态端口(Dynamic Ports)?动态端口的范围是多少?
2014/12/12 面试题
求职毕业生自荐书
2014/02/08 职场文书
办公室管理规章制度
2015/08/04 职场文书
2016年教师学习教师法心得体会
2016/01/20 职场文书
68句权威创业名言
2019/08/26 职场文书