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中lambda()的用法
Nov 16 Python
使用python实现链表操作
Jan 26 Python
在Python中获取两数相除的商和余数方法
Nov 10 Python
python爬虫之urllib库常用方法用法总结大全
Nov 14 Python
浅谈Python 敏感词过滤的实现
Aug 15 Python
Python 50行爬虫抓取并处理图灵书目过程详解
Sep 20 Python
Python字节单位转换实例
Dec 05 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
Jun 01 Python
彻底搞懂python 迭代器和生成器
Sep 07 Python
python使用glob检索文件的操作
May 20 Python
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
May 04 Python
python如何查找列表中元素的位置
May 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学习笔记(一):基本语法之标记、空白、和注释
2015/04/17 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
php模拟post提交请求调用接口示例解析
2020/08/07 PHP
jquery 跨域访问问题解决方法(笔记)
2011/06/08 Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
2012/08/14 Javascript
浅谈javascript中createElement事件
2014/12/05 Javascript
JS模式之单例模式基本用法
2015/06/30 Javascript
jquery实现清新实用的网页菜单效果
2015/08/28 Javascript
js中利用cookie实现记住密码功能
2020/08/20 Javascript
Angular中$state.go页面跳转并传递参数的方法
2017/05/09 Javascript
js 索引下标之li集合绑定点击事件
2018/01/12 Javascript
Angular使用操作事件指令ng-click传多个参数示例
2018/03/27 Javascript
vue设计一个倒计时秒杀的组件详解
2019/04/06 Javascript
基于JavaScript伪随机正态分布代码实例
2019/11/07 Javascript
python函数缺省值与引用学习笔记分享
2013/02/10 Python
Python中lambda的用法及其与def的区别解析
2014/07/28 Python
python中调试或排错的五种方法示例
2019/09/12 Python
Python读取YAML文件过程详解
2019/12/30 Python
Python 解码Base64 得到码流格式文本实例
2020/01/09 Python
浅谈keras的深度模型训练过程及结果记录方式
2020/01/24 Python
使用python的turtle函数绘制一个滑稽表情
2020/02/28 Python
python读取图像矩阵文件并转换为向量实例
2020/06/18 Python
Django项目在pycharm新建的步骤方法
2021/03/02 Python
Famous Footwear加拿大:美国多品牌运动休闲鞋店
2018/12/05 全球购物
即将毕业大学生自荐信
2014/01/24 职场文书
《夕阳真美》教学反思
2014/04/27 职场文书
2014法院干警廉洁警示教育思想汇报
2014/09/13 职场文书
2014年扶贫工作总结
2014/11/18 职场文书
病人写给医生的感谢信
2015/01/23 职场文书
教师辞职书范文
2015/02/26 职场文书
2015年大学生工作总结
2015/04/21 职场文书
毕业晚宴祝酒词
2015/08/11 职场文书
2016年校园重阳节广播稿
2015/12/18 职场文书
JS继承最简单的理解方式
2021/03/31 Javascript
解决Pytorch修改预训练模型时遇到key不匹配的情况
2021/06/05 Python
SQL Server2019安装的详细步骤实战记录(亲测可用)
2022/06/10 SQL Server