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通过websocket与js客户端通信示例分析
Jun 25 Python
Python httplib模块使用实例
Apr 11 Python
python 计算文件的md5值实例
Jan 13 Python
Python新手入门最容易犯的错误总结
Apr 24 Python
Python利用matplotlib生成图片背景及图例透明的效果
Apr 27 Python
Python pymongo模块用法示例
Mar 31 Python
一行Python代码制作动态二维码的实现
Sep 09 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
Jan 25 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
Feb 11 Python
Python更新所有已安装包的操作
Feb 13 Python
Jupyter Notebook远程登录及密码设置操作
Apr 10 Python
将不规则的Python多维数组拉平到一维的方法实现
Jan 11 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+JS+rsa数据加密传输实现代码
2011/03/23 PHP
浅析php变量修饰符static的使用
2013/06/28 PHP
php实现的Cookies操作类实例
2014/09/24 PHP
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
2018/04/08 PHP
document.all与WEB标准
2020/05/13 Javascript
jquery ajax例子返回值详解
2012/09/11 Javascript
有关javascript的性能优化 (repaint和reflow)
2013/04/12 Javascript
jQuery函数的等价原生函数代码示例
2013/05/27 Javascript
Nodejs实现的一个静态服务器实例
2014/12/06 NodeJs
jquery果冻抖动效果实现方法
2015/01/15 Javascript
JavaScript通过prototype给对象定义属性用法实例
2015/03/23 Javascript
javascript跨域的方法汇总
2015/10/23 Javascript
jQuery表格插件datatables用法汇总
2016/03/29 Javascript
Knockout结合Bootstrap创建动态UI实现产品列表管理
2016/09/14 Javascript
Vue.js实现一个SPA登录页面的过程【推荐】
2017/04/29 Javascript
JavaScript实现各种排序的代码详解
2017/08/28 Javascript
基于vue2的canvas时钟倒计时组件步骤解析
2018/11/05 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
js实现ajax的用户简单登入功能
2020/06/18 Javascript
[01:37]TI4西雅图DOTA2前线报道 VG拿下首胜教练357给出获胜秘诀
2014/07/10 DOTA
python实现kMeans算法
2017/12/21 Python
pytorch多进程加速及代码优化方法
2019/08/19 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
2019/08/20 Python
Python标准库:内置函数max(iterable, *[, key, default])说明
2020/04/25 Python
PyCharm最新激活码PyCharm2020.2.3有效
2020/11/18 Python
我们没有写servlet的构造方法,那么容器是怎么创建servlet的实例呢
2013/04/24 面试题
面试后感谢信怎么写
2014/02/01 职场文书
技能比赛获奖感言
2014/02/14 职场文书
2014年乡镇纪委工作总结
2014/12/19 职场文书
中班下学期个人总结
2015/02/12 职场文书
2016年元旦寄语
2015/08/17 职场文书
2016党性教育学习心得体会
2016/01/21 职场文书
RPM包方式安装Oracle21c的方法详解
2021/08/23 Oracle
python自动获取微信公众号最新文章的实现代码
2022/07/15 Python