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函数形参用法实例分析
Aug 04 Python
Python利用Beautiful Soup模块创建对象详解
Mar 27 Python
Python 列表(List) 的三种遍历方法实例 详解
Apr 15 Python
TF-IDF算法解析与Python实现方法详解
Nov 16 Python
python基于paramiko将文件上传到服务器代码实现
Jul 08 Python
python+opencv像素的加减和加权操作的实现
Jul 14 Python
django如何自己创建一个中间件
Jul 24 Python
PYQT5开启多个线程和窗口,多线程与多窗口的交互实例
Dec 13 Python
使用PyTorch实现MNIST手写体识别代码
Jan 18 Python
Python函数生成器原理及使用详解
Mar 12 Python
Python tcp传输代码实例解析
Mar 18 Python
深入浅析python 中的self和cls的区别
Jun 20 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
深入理解用mysql_fetch_row()以数组的形式返回查询结果
2013/06/05 PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
2014/06/23 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
2017/08/01 PHP
JavaScript的public、private和privileged模式
2009/12/28 Javascript
利用JS延迟加载百度分享代码,提高网页速度
2013/07/01 Javascript
基于javascript如何传递特殊字符
2015/11/30 Javascript
jQuery同步提交示例代码
2015/12/12 Javascript
谷歌showModalDialog()方法不兼容出现对话窗口的解决办法
2016/02/15 Javascript
详细讲解JavaScript中的this绑定
2016/10/10 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
2016/12/23 Javascript
JavaScript制作简单的框选图表
2017/05/15 Javascript
详解Angular2中Input和Output用法及示例
2017/05/21 Javascript
webpack打包js的方法
2018/03/12 Javascript
QRCode.js二维码生成并能长按识别
2018/10/16 Javascript
Vue表单之v-model绑定下拉列表功能
2019/05/14 Javascript
微信公众号平台接口开发 获取access_token过程解析
2019/08/14 Javascript
使用jquery实现轮播图效果
2021/01/02 jQuery
bat和python批量重命名文件的实现代码
2016/05/19 Python
Python字符串和字典相关操作的实例详解
2017/09/23 Python
Django rest framework基本介绍与代码示例
2018/01/26 Python
全面分析Python的优点和缺点
2018/02/07 Python
vscode 配置 python3开发环境的方法
2019/09/19 Python
Python的赋值、深拷贝与浅拷贝的区别详解
2020/02/12 Python
python 使用事件对象asyncio.Event来同步协程的操作
2020/05/04 Python
基于python和flask实现http接口过程解析
2020/06/15 Python
MSC邮轮官方网站:加勒比海、地中海和世界各地的假期
2018/08/27 全球购物
Ajax主要包含了哪些技术
2014/06/12 面试题
大学毕业生通用自我评价
2014/01/05 职场文书
《宋庆龄故居的樟树》教学反思
2014/04/07 职场文书
驾驶员培训方案
2014/05/01 职场文书
《开国大典》教学反思
2016/02/16 职场文书
导游词之西安骊山
2019/12/20 职场文书
读《茶花女》有感:山茶花的盛开与凋零
2020/01/17 职场文书
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS
JavaScript中的宏任务和微任务详情
2021/11/27 Javascript
分享提高 Python 代码的可读性的技巧
2022/03/03 Python