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

你可能感兴趣的:(#,加解密应用)