Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)

 更新时间:2019年12月04日 10:38:38   作者:clkai  
这篇文章主要介绍了Python3.7基于hashlib和Crypto实现加签验签功能,环境是基于python3.7,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

环境:

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 虚拟环境详解

    这篇文章主要为大家介绍了python 虚拟环境,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助<BR>
    2021-12-12
  • Python中8种运算符介绍以及示例

    Python中8种运算符介绍以及示例

    在Python编程中运算符是用于执行各种操作的特殊符号或关键字,下面这篇文章主要给大家介绍了关于Python中8种运算符介绍以及示例的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-02-02
  • pandas 小数位数 精度的处理方法

    pandas 小数位数 精度的处理方法

    今天小编就为大家分享一篇pandas 小数位数 精度的处理方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Tensorflow实现部分参数梯度更新操作

    Tensorflow实现部分参数梯度更新操作

    今天小编就为大家分享一篇Tensorflow实现部分参数梯度更新操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • 解决Python3.8运行tornado项目报NotImplementedError错误

    解决Python3.8运行tornado项目报NotImplementedError错误

    这篇文章主要介绍了Python3.8运行tornado项目报NotImplementedError错误,本文给大家分享解决方法,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • python不带重复的全排列代码

    python不带重复的全排列代码

    输入起始数字和结束数字将数组全排列,需要的朋友可以参考下
    2013-08-08
  • tensorflow 动态获取 BatchSzie 的大小实例

    tensorflow 动态获取 BatchSzie 的大小实例

    这篇文章主要介绍了tensorflow 动态获取 BatchSzie 的大小实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python谱减法语音降噪实例

    Python谱减法语音降噪实例

    今天小编就为大家分享一篇Python谱减法语音降噪实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python 与c++相互调用实现

    python 与c++相互调用实现

    这篇文章主要介绍了python 与c++相互调用实现,我们都知道c++运算速度快于python,python又简单易写,很多人就会想到将两者结合,接下俩小编要给大家介绍的就是python 与c++相互调用实现,,需要的朋友可以参考一下
    2022-03-03
  • Python高阶函数map() 简介和使用详解

    Python高阶函数map() 简介和使用详解

    map() 函数是Python中的内置函数,这个函数又叫做映射函数,其实里面具有一个迭代器的功能,会依次遍历可迭代对象进行相关的操作,这篇文章主要介绍了Python高阶函数map() 简介和使用详解,需要的朋友可以参考下
    2023-03-03

最新评论