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最基本的数据类型以及对元组的介绍
Apr 14 Python
Python实现简单的代理服务器
Jul 25 Python
python中实现延时回调普通函数示例代码
Sep 08 Python
对Pandas DataFrame缺失值的查找与填充示例讲解
Nov 06 Python
python 处理数字,把大于上限的数字置零实现方法
Jan 28 Python
Python计算一个点到所有点的欧式距离实现方法
Jul 04 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
Jul 11 Python
python中update的基本使用方法详解
Jul 17 Python
Django框架视图层URL映射与反向解析实例分析
Jul 29 Python
Python3.7.0 Shell添加清屏快捷键的实现示例
Mar 23 Python
使用Keras中的ImageDataGenerator进行批次读图方式
Jun 17 Python
如何利用python和DOS获取wifi密码
Mar 31 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输出控制功能在简繁体转换中的应用
2006/10/09 PHP
打造超酷的PHP数据饼图效果实现代码
2011/11/23 PHP
PHP两种去掉数组重复值的方法比较
2014/06/19 PHP
php实现的美国50个州选择列表实例
2015/04/20 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
PHP CURL中传递cookie的方法步骤
2019/05/09 PHP
laravel 修改记住我功能的cookie保存时间的方法
2019/10/14 PHP
JavaScript 中的replace方法说明
2007/04/13 Javascript
javascript静态页面传值的三种方法分享
2013/11/12 Javascript
JS获取IP、MAC和主机名的五种方法
2013/11/14 Javascript
开启Javascript中apply、call、bind的用法之旅模式
2015/10/28 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
2015/11/07 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
2016/12/04 Javascript
vue.js指令v-model实现方法
2016/12/05 Javascript
JS设置CSS样式的方式汇总
2017/01/21 Javascript
JS使用贪心算法解决找零问题示例
2017/11/27 Javascript
Vue 项目部署到服务器的问题解决方法
2017/12/05 Javascript
angularJS开发注意事项
2018/05/26 Javascript
js图片查看器插件用法示例
2019/06/22 Javascript
Python装饰器使用示例及实际应用例子
2015/03/06 Python
详解Python中的装饰器、闭包和functools的教程
2015/04/02 Python
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
pycharm远程开发项目的实现步骤
2019/01/20 Python
Python同步遍历多个列表的示例
2019/02/19 Python
Python实现银行账户资金交易管理系统
2020/01/03 Python
pytorch 准备、训练和测试自己的图片数据的方法
2020/01/10 Python
Python实现屏幕录制功能的代码
2020/03/02 Python
一套SQL笔试题
2016/08/14 面试题
幼儿园运动会入场词
2014/02/10 职场文书
应届电子商务毕业自荐书范文
2014/02/11 职场文书
张家口市高新区党工委群众路线教育实践活动整改方案
2014/10/25 职场文书
个人求职信格式范文
2015/03/20 职场文书
高中语文教材(文学文化常识大全一)
2019/08/13 职场文书
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js
微信小程序APP的生命周期及页面的生命周期
2022/04/19 Javascript