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 相关文章推荐
Python3.x和Python2.x的区别介绍
Feb 12 Python
python连接池实现示例程序
Nov 26 Python
Django小白教程之Django用户注册与登录
Apr 22 Python
视觉直观感受若干常用排序算法
Apr 13 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
Mar 19 Python
pygame游戏之旅 添加游戏界面按键图形
Nov 20 Python
Linux下远程连接Jupyter+pyspark部署教程
Jun 21 Python
python  文件的基本操作 菜中菜功能的实例代码
Jul 17 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
Dec 10 Python
使用Python爬虫库requests发送表单数据和JSON数据
Jan 25 Python
Python configparser模块常用方法解析
May 22 Python
python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解
Dec 22 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
提取HTML标签
2006/10/09 PHP
PHP伪造referer实例代码
2008/09/20 PHP
php使用strtotime和date函数判断日期是否有效代码分享
2013/12/25 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
2017/05/05 PHP
PHP+ajax实现获取新闻数据简单示例
2018/05/08 PHP
初探jquery——表单应用范例
2007/02/20 Javascript
一次失败的jQuery优化尝试小结
2011/02/06 Javascript
nodejs win7下安装方法
2012/05/24 NodeJs
前后台交互过程中json格式如何解析以及如何生成
2012/12/26 Javascript
select标签模拟/美化方法采用JS外挂式插件
2013/04/01 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
2013/11/22 Javascript
js的参数有长度限制吗?发现不能超过2083个字符
2014/04/20 Javascript
jQuery实现仿微软首页感应鼠标变化滑动窗口效果
2015/10/08 Javascript
jQuery插件开发精品教程让你的jQuery提升一个台阶
2016/01/27 Javascript
AngularJS中的$watch(),$digest()和$apply()区分
2016/04/04 Javascript
jQuery实现简单滚动动画效果
2016/04/07 Javascript
Angular ng-repeat 对象和数组遍历实例
2016/09/14 Javascript
C#微信小程序服务端获取用户解密信息实例代码
2017/03/10 Javascript
JavaScript简单实现关键字文本搜索高亮显示功能示例
2018/07/25 Javascript
[02:49]DAC2018决赛日TOP5 LGD开启黑暗之门绝杀VP
2018/04/08 DOTA
[01:08:48]LGD vs OG 2018国际邀请赛淘汰赛BO3 第三场 8.25
2018/08/29 DOTA
Python3基础之输入和输出实例分析
2014/08/18 Python
Python and、or以及and-or语法总结
2015/04/14 Python
Python编程入门之Hello World的三种实现方式
2015/11/13 Python
Python利用scapy实现ARP欺骗的方法
2019/07/23 Python
Python调用shell命令常用方法(4种)
2020/05/11 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
python3 kubernetes api的使用示例
2021/01/12 Python
html5实现微信打飞机游戏
2014/03/27 HTML / CSS
毕业生就业自荐信
2013/12/04 职场文书
房屋改造计划书
2014/01/10 职场文书
火车的故事教学反思
2014/02/11 职场文书
教职工代表大会主持词
2014/04/01 职场文书
大学生个人求职信例文
2014/07/07 职场文书
教你如何让spark sql写mysql的时候支持update操作
2022/02/15 MySQL
不同品牌、不同型号对讲机如何互相通联
2022/02/18 无线电