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查询Mysql时返回字典结构的代码
Jun 18 Python
使用Pyrex来扩展和加速Python程序的教程
Apr 13 Python
pymongo给mongodb创建索引的简单实现方法
May 06 Python
Python3读取文件常用方法实例分析
May 22 Python
python snownlp情感分析简易demo(分享)
Jun 04 Python
图解Python变量与赋值
Apr 03 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
Jun 03 Python
python实现批量nii文件转换为png图像
Jul 18 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
Oct 21 Python
如何利用Python写个坦克大战
Nov 18 Python
Django url 路由匹配过程详解
Jan 22 Python
Python基础之常用库常用方法整理
Apr 30 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 5.0 Pear安装方法
2006/12/06 PHP
PHP实现的迷你漂流瓶
2015/07/29 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
2016/10/28 PHP
laravel 修改记住我功能的cookie保存时间的方法
2019/10/14 PHP
thinkphp5.1框架模板赋值与变量输出示例
2020/05/25 PHP
JavaScript判断两种格式的输入日期的正确性的代码
2007/03/25 Javascript
几种设置表单元素中文本输入框不可编辑的方法总结
2013/11/25 Javascript
JS比较两个时间大小的简单示例代码
2013/12/20 Javascript
javascript事件冒泡详解和捕获、阻止方法
2014/04/12 Javascript
原生js实现移动开发轮播图、相册滑动特效
2015/04/17 Javascript
JS+CSS实现简单滑动门(滑动菜单)效果
2015/09/19 Javascript
javascript学习笔记整理(概述、变量、数据类型简介)
2015/10/25 Javascript
JavaScript DOM 对象深入了解
2016/07/20 Javascript
总结Javascript中数组各种去重的方法
2016/10/04 Javascript
Angular2平滑升级到Angular4的步骤详解
2017/03/29 Javascript
JavaScript Canvas实现验证码
2020/08/02 Javascript
茶余饭后聊聊Vue3.0响应式数据那些事儿
2019/10/30 Javascript
vue ssr+koa2构建服务端渲染的示例代码
2020/03/23 Javascript
JS判断数组是否包含某元素实现方法汇总
2020/06/24 Javascript
Python判断变量是否已经定义的方法
2014/08/18 Python
shelve  用来持久化任意的Python对象实例代码
2016/10/12 Python
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
Python列表生成式与生成器操作示例
2018/08/01 Python
Python中base64与xml取值结合问题
2019/12/22 Python
python中remove函数的踩坑记录
2021/01/04 Python
HTML5之消息通知的使用(Web Notification)
2018/10/30 HTML / CSS
ReVive利维肤美国官网:RéVive Skincare
2018/04/18 全球购物
Stokke美国官方网店:高级儿童家具、推车、汽车座椅和配件
2020/06/06 全球购物
Swanson中国官网:美国斯旺森健康产品公司
2021/03/01 全球购物
事业单位个人应聘自荐信
2013/09/21 职场文书
自动化专业个人求职信范文
2013/12/30 职场文书
新年寄语大全
2014/04/12 职场文书
护士感人事迹
2014/05/01 职场文书
工商管理专业毕业生求职信
2014/05/26 职场文书
硕士学位申请报告
2015/05/15 职场文书
生鲜超市—未来中国最具有潜力零售业态
2019/08/02 职场文书