python 公钥解密

import base64
from cryptography.hazmat.backends.openssl.backend import backend
from cryptography.hazmat.primitives.serialization import load_pem_public_key
from config import conf


# base64解密
def decode_base64(data):
    missing_padding = 4 - len(data) % 4
    if missing_padding:
        data += b'=' * missing_padding
    return base64.urlsafe_b64decode(data)


# base64加密
def encode_base64(data):
    data = base64.urlsafe_b64encode(data)
    return data


# 公钥解密
def openssl_public_decrypt(key, data):
    length = backend._lib.EVP_PKEY_size(key._evp_pkey)
    buffer = backend._ffi.new('unsigned char[]', length)
    backend._lib.RSA_public_decrypt(
        len(data),
        data,
        buffer,
        backend._lib.EVP_PKEY_get1_RSA(key._evp_pkey),
        backend._lib.RSA_PKCS1_PADDING)
    return backend._ffi.buffer(buffer)[:]


def jdq_public_decrypt(data):
    decrypt = ''
    # base64解密
    data_content = decode_base64(data.encode())
    # 计算总长度
    totalLen = len(data_content)
    # 设置起点
    decryptPos = 0
    # 载入公钥
    pubkey = load_pem_public_key(conf.otherPubKey.encode(), backend)

    while decryptPos < totalLen:
        # 循环公钥解密
        res = openssl_public_decrypt(pubkey, data_content[decryptPos:decryptPos + 128])
        # 拼接
        decrypt += res.decode()
        # 起点+128
        decryptPos += 128
    return decrypt
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值