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中return语句用法实例分析
Aug 04 Python
Python中字典和集合学习小结
Jul 07 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
Nov 14 Python
Python基础语言学习笔记总结(精华)
Nov 14 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
May 16 Python
python爬虫的一个常见简单js反爬详解
Jul 09 Python
Python将string转换到float的实例方法
Jul 29 Python
python调用支付宝支付接口流程
Aug 15 Python
Python实现寻找回文数字过程解析
Jun 09 Python
如何解决安装python3.6.1失败
Jul 01 Python
Python数据分析之pandas读取数据
Jun 02 Python
Python的这些库,你知道多少?
Jun 09 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生成SessionID和图片校验码的思路和实现代码
2009/03/10 PHP
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
2012/09/23 PHP
解析MySql与Java的时间类型
2013/06/22 PHP
php实现短信发送代码
2015/07/05 PHP
windows8.1下Apache+Php+MySQL配置步骤
2015/10/30 PHP
分享五个PHP7性能优化提升技巧
2015/12/07 PHP
Yii2 queue的队列使用详解
2019/07/19 PHP
javascript生成随机大小写字母的方法
2014/02/20 Javascript
Jquery.Form 异步提交表单的简单实例
2014/03/03 Javascript
js隐式全局变量造成的bug示例代码
2014/04/22 Javascript
使用insertAfter()方法在现有元素后添加一个新元素
2014/05/28 Javascript
基于JavaScript实现手机短信按钮倒计时(超简单)
2015/12/30 Javascript
AngularJS使用自定义指令替代ng-repeat的方法
2016/09/17 Javascript
JavaScript截屏功能的实现代码
2017/07/28 Javascript
angular+ionic返回上一页并刷新页面
2017/08/08 Javascript
教你完全理解ReentrantLock重入锁
2019/06/03 Javascript
JavaScript迭代器的含义及用法
2019/06/21 Javascript
前端vue-cli项目中使用img图片和background背景图的几种方法
2019/11/13 Javascript
echarts实现晶体球面投影的实例教程
2020/10/10 Javascript
python查看zip包中文件及大小的方法
2015/07/09 Python
对Python中type打开文件的方式介绍
2018/04/28 Python
基于Django框架利用Ajax实现点赞功能实例代码
2018/08/19 Python
Python告诉你木马程序的键盘记录原理
2019/02/02 Python
python 实现图片上传接口开发 并生成可以访问的图片url
2019/12/18 Python
pytorch::Dataloader中的迭代器和生成器应用详解
2020/01/03 Python
采用冷却技术的超自然舒适度:GhostBed床垫
2018/09/18 全球购物
香港现代设计家具品牌:Ziinlife Furniture
2018/11/13 全球购物
跟单文员岗位职责
2014/01/03 职场文书
大型主题婚礼活动策划方案
2014/09/15 职场文书
单位介绍信格式
2015/01/31 职场文书
收银员岗位职责范本
2015/04/07 职场文书
实习单位意见
2015/06/04 职场文书
《家》读后感:万惜拯救,冷暖自知
2019/09/25 职场文书
详解Django中 render() 函数的使用方法
2021/04/22 Python
浅谈Mysql多表连接查询的执行细节
2021/04/24 MySQL
Python线程池与GIL全局锁实现抽奖小案例
2022/04/13 Python