python-rsa-base64-加解密

该博客介绍了Python中使用rsa库和Crypto库进行RSA加解密的方法,包括如何生成公钥和私钥,以及如何处理加密和解密过程中的长度限制。通过分段加密和解密解决了长字符串的处理问题,确保了数据的安全传输。内容涉及base64编码、PKCS1_v1_5加密模式,并给出了完整代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为前端的rsa是将base64封装到里面了, python的rsa加密不经过base64处理的话 是 字节串,字节串不利于传输所以需要转成base64.


加密流程 : RSA加密 > BASE64加密
解密流程 : BASE64解密 > RSA解密


有长度限制.


import base64

import rsa


def create_keys():  # 生成公钥和私钥
    Public_key, Private_key = rsa.newkeys(1024)
    pub = Public_key.save_pkcs1()
    with open('Public_key.pem', 'wb+')as f:  # 公
        f.write(pub)

    pri = Private_key.save_pkcs1()
    with open('Private_key.pem', 'wb+')as f:  # 私
        f.write(pri)


def encrypt(content):  # 用公钥加密
    with open('Public_key.pem', 'rb') as Public_key:
        p = Public_key.read()
    pubkey = rsa.PublicKey.load_pkcs1(p)
    original_text = str(content).encode('utf8')  # 加密前处理
    Encrypted_content = rsa.encrypt(original_text, pubkey)
    cipher_text = base64.b64encode(Encrypted_content).decode()  # base64 加密
    return cipher_text  # 加密后的密文


def decrypt(encryption_text):  # 用私钥解密
    with open('Private_key.pem', 'rb') as Private_key:
        p = Private_key.read()
    cipher_text = (base64.b64decode(encryption_text))  # base64 解密
    secret_key = rsa.PrivateKey.load_pkcs1(p)
    Decrypt_content = rsa.decrypt(cipher_text, secret_key).decode()  # 注意,这里如果结果是bytes类型,就需要进行decode()转化为str
    return Decrypt_content


if __name__ == '__main__':
    # create_keys()
    crypt_text = encrypt({"code": 1})
    print(crypt_text)
    print(decrypt(crypt_text))


无长度限制,分段式加解密.


1.0 这里是使用了 Crypto,Windows 上安装这个有时候会有问题.


import base64

from Crypto.Cipher import PKCS1_v1_5
from Crypto.PublicKey import RSA


def create_keys():  # 生成公钥和私钥
    Public_key, Private_key = rsa.newkeys(1024)
    pub = Public_key.save_pkcs1()
    with open('../static/pem/Public_key.pem', 'wb+')as f:  # 公
        f.write(pub)

    pri = Private_key.save_pkcs1()
    with open('../static/pem/Private_key.pem', 'wb+')as f:  # 私
        f.write(pri)


# 分段长加密
def c_jia_mi(msg: str):  # Crypto 加密
    # 获取公钥
    key = open('../static/pem/Public_key.pem').read()
    public_key = RSA.importKey(key)
    # 分段加密
    pk = PKCS1_v1_5.new(public_key)
    encrypt_text = []
    for i in range(0, len(msg), 100):
        cont = msg[i:i + 100]
        encrypt_text.append(pk.encrypt(cont.encode()))
    # 加密完进行拼接
    cipher_text = b''.join(encrypt_text)
    # base64进行编码
    result = base64.b64encode(cipher_text)
    return result.decode()


# 分段长解密
def c_jie_mi(msg: str):  # Crypto 解密
    # base64解码
    msg = base64.b64decode(msg)
    # 获取私钥
    private_key = open('../static/pem/Private_key.pem').read()
    rsa_key = RSA.importKey(private_key)
    cipher = PKCS1_v1_5.new(rsa_key)
    # 进行解密
    text = []
    for i in range(0, len(msg), 128):
        cont = msg[i:i + 128]
        text.append(cipher.decrypt(cont, 1))
    text = b''.join(text)
    return text.decode()

2.0 这里是使用了 rsa, Windows可以直接安装这个.( 我测试没啥问题,这是我根据Crypto改的.)


import base64

import rsa

# 分段长加密_RSA
def r_jia_mi_1(msg: str):  # RAS 加密
    # 获取公钥
    with open('../static/pem/Public_key.pem', 'rb') as Public_key:
        p = Public_key.read()
    pubkey = rsa.PublicKey.load_pkcs1(p)
    encrypt_text = []
    for i in range(0, len(msg), 100):
        cont = msg[i:i + 100]
        encrypt_text.append(rsa.encrypt(str(cont).encode('utf8'), pubkey))
    # 加密完进行拼接
    cipher_text = b''.join(encrypt_text)
    # base64进行编码
    result = base64.b64encode(cipher_text)
    return result.decode()


# 分段长解密
def r_jie_mi(msg: str):  # RSA 解密
    # base64解码
    msg = base64.b64decode(msg)
    # 获取私钥
    with open('../static/pem/Private_key.pem', 'rb') as Private_key:
        p = Private_key.read()
    secret_key = rsa.PrivateKey.load_pkcs1(p)
    # 进行解密
    text = []
    for i in range(0, len(msg), 128):
        cont = msg[i:i + 128]
        text.append(rsa.decrypt(cont, secret_key))
    text = b''.join(text)
    return text.decode()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值