资讯专栏INFORMATION COLUMN

python加密与解密,加签与验签

daydream / 2356人阅读

摘要:在与第三方服务对接时,加密与解密,加签与验签是这个过程中的关键一步一般情况下,对接服务中会有两对公私钥。传回来的数据,使用自己的私钥解密,使用对方的公钥验签。加密加密超长字节个字节一加密解密解密超长字符一解密加签验签签名待验证签名

在与第三方服务对接时,加密与解密,加签与验签是这个过程中的关键一步

一般情况下,对接服务中会有两对公私钥。使用对方公钥进行加密,使用自己私钥进行加签。传回来的数据,使用自己的私钥解密,使用对方的公钥验签。

import base64
from Crypto.PublicKey import RSA
from Crypto.Hash import SHA
from Crypto.Cipher import PKCS1_v1_5
from Crypto.Signature import PKCS1_v1_5 as SIGN_PKCS

PUB_KEY = RSA.importKey(open("rsa_public_key.pem","r").read())
PRI_KEY = RSA.importKey(open("rsa_private_key.pem","r").read())

加密

def split_data(l, n):
    for i in range(0, len(l), n):
        yield l[i: i+n]
        
def encrypt(params):
    raw = params.encode("utf-8")
    cipher = PKCS1_v1_5.new(PUB_KEY)
    # 加密超长字节117个字节一加密
    content = b"".join([cipher.encrypt(x) for x in chunks(raw, 117)])
    return base64.b64encode(content)
    

解密

def decrypt(data):
    raw = data.encode("utf-8")
    decrypt = PKCS1_v1_5.new(PRI_KEY).decrypt
    # 解密超长字符128一解密
    content = b"".join(decrypt(x, object()) for x in chunks(raw, 128))
    return content.decode()

加签

def signer(data):
    signstr = data.encode("utf-8")
    sign = SIGN_PKCS.new(PRI_KEY).sign(SHA.new(signstr))
    return base64.b64encode(sign)

验签

def verify_sign(unsign, raw_sign):
    """
     unsign: 签名
     raw_sign: 待验证签名
    """
    assert SIGN_PKCS.new(PUB_KEY).verify(SHA.new(unsign.encode("utf-8")), raw_sign)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/45551.html

相关文章

  • 支付签名原串的那些事,但选择排序生成签名原串

    摘要:工商银行中国工商银行提现支付域名项目名接口我们第一次使用支付请求对象,是为了将其生成签名原串。第一次加密是将不包含属性值的支付请求对象封装的签名原串和我们生成的私钥共同加密成签名字符串,放进支付请求对象中的属性中。 引题 【备注】签名原串的源码放在git上了,请大家参看:项目源码 笔者最近在做支付、调用天猫优惠券、绑定银行卡相关的业务,在这些业务中,我们都需要将数据加密。然而,数据的加...

    DC_er 评论0 收藏0
  • 基于注解的 java 加签验签框架 checksum

    摘要:基于注解生成加签验签。后来发现如下的问题有些字段太大,不想参与验签,但是无法方便的调整。感觉这样有很大的弊端,完全失去了灵活性。 checksum 基于 java 注解生成加签验签 checksum。 开源地址:github checksum 创作缘由 原来的代码中,checksum 的生成是用的工具类方法。 后来发现如下的问题: 有些字段太大,不想参与验签,但是无法方便的调整。 ...

    jindong 评论0 收藏0
  • 回眸曾经的项目,第三方支付相关,所带来的沟通问题

    摘要:钱可以存储在自己的余额中,这就相当于微信钱包,余额可以提现到银行卡的中。我们的第三方支付平台是连连支付,杭州的一家公司。私钥怎么加签每个公司的加签方式是不一样的,支付宝有支付宝的加签方式,微信有微信的加签方式。 导读 笔者在校期间,通过自学java。学校里也开过这门课,但是,讲的都是一些基础,比如java的表达式、基本类型、自定义类型等等。也都是很基础的东西,就连lambda表达式都没...

    kaka 评论0 收藏0
  • python (3.x) 实现RSA 加签 验签 以及key的序列化

    摘要:首先安装确认安装的是版本版本的是不一样的生成公私钥对生成私钥同时包含公钥此处为序列化公钥私钥并写入文件存储序列化私钥无密码也可以加入密码保护私钥将私钥写入文件将公钥写入文件也可以采用其他序列化方法比如对公钥生成格式的序列化字符串输出类似于 首先 安装cryptography sudo pip3 install cryptography 确认安装的是2.1.x版本 (1.x版本的api是...

    kuangcaibao 评论0 收藏0
  • RSA加密解密(无数据大小限制,php、go、java互通实现)

    摘要:加解密中必须考虑到的密钥长度明文长度和密文长度问题。而只要用到,那么就要占用实际的明文长度,于是实际明文长度需要减去字节长度。所以如果要对任意长度的数据进行加密,就需要将数据分段后进行逐一加密,并将结果进行拼接。 RSA加解密中必须考虑到的密钥长度、明文长度和密文长度问题。明文长度需要小于密钥长度,而密文长度则等于密钥长度。因此当加密内容长度大于密钥长度时,有效的RSA加解密就需要对内...

    whjin 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<