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 相关文章推荐
在Django的form中使用CSS进行设计的方法
Jul 18 Python
Python操作Oracle数据库的简单方法和封装类实例
May 07 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
Aug 16 Python
python 随机打乱 图片和对应的标签方法
Dec 14 Python
python学生管理系统开发
Jan 30 Python
python自动化测试无法启动谷歌浏览器问题
Oct 10 Python
Python 时间戳之获取整点凌晨时间戳的操作方法
Jan 28 Python
python数据类型可变不可变知识点总结
Mar 06 Python
Python 统计位数为偶数的数字代码详解
Mar 15 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
Mar 27 Python
Selenium python时间控件输入问题解决方案
Jul 22 Python
基于Pygame实现简单的贪吃蛇游戏
Dec 06 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 set_error_handler()函数使用详解(示例)
2013/11/12 PHP
php基于session实现数据库交互的类实例
2015/08/03 PHP
Javascript绝句欣赏 一些经典的js代码
2012/02/22 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
2012/08/17 Javascript
js中取得变量绝对值的方法
2015/01/03 Javascript
javascript闭包的理解
2015/04/01 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
微信小程序Redux绑定实例详解
2017/06/07 Javascript
JavaScript变量类型以及变量作用域详解
2017/08/14 Javascript
JS基于递归实现网页版计算器的方法分析
2017/12/20 Javascript
使用Vue开发一个实时性时间转换指令
2018/01/17 Javascript
vue的diff算法知识点总结
2018/03/29 Javascript
JS函数内部属性之arguments和this实例解析
2018/10/07 Javascript
layui表格数据重载
2019/07/27 Javascript
Vue自定义组件的四种方式示例详解
2020/02/28 Javascript
ng-alain的sf如何自定义部件的流程
2020/06/12 Javascript
[52:09]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第二场
2014/05/26 DOTA
[00:43]魔廷新尊——痛苦女王至宝捆绑包
2020/06/12 DOTA
Python 中 Meta Classes详解
2016/02/13 Python
详解爬虫被封的问题
2019/04/23 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
2019/06/26 Python
python数据化运营的重要意义
2019/11/25 Python
python多进程重复加载的解决方式
2019/12/13 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
2020/06/02 Python
世界上最受欢迎的花店:1-800-Flowers.com
2020/06/01 全球购物
C#基础面试题
2016/10/17 面试题
小区停车场管理制度
2014/01/27 职场文书
党校培训自我鉴定范文
2014/03/20 职场文书
儿童生日会策划方案
2014/05/15 职场文书
医院党员公开承诺书
2014/08/30 职场文书
农村党支部书记党群众路线四风问题整改措施
2014/09/26 职场文书
婚礼领导致辞大全
2015/07/28 职场文书
大学迎新生的欢迎词
2019/06/25 职场文书
理解深度学习之深度学习简介
2021/04/14 Python
python数字转对应中文的方法总结
2021/08/02 Python
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js