RSA分段加密

#coding:utf-8
from Crypto import Random
from Crypto.PublicKey import RSA

RSA_LENGTH = 2048
ENCRY_MAX_LENGTH = RSA_LENGTH/8 -11
DECRY_LENGTH = RSA_LENGTH/8

# 生成秘钥对实例对象:1024是秘钥的长度
rsa = RSA.generate(RSA_LENGTH)

# 获取公钥,保存到文件
private_pem = rsa.exportKey()
with open('private.pem', 'wb') as f:
    f.write(private_pem)

# 获取私钥保存到文件
public_pem = rsa.publickey().exportKey()
with open('public.pem', 'wb') as f:
    f.write(public_pem)

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



def encry(msg):
    """
    公钥加密
    :param msg: 要加密内容
    :return:  加密之后的密文
    """
    # 获取公钥
    key = open('public.pem').read()
    publickey = RSA.importKey(key)
    # 分段加密
    pk = PKCS1_v1_5.new(publickey)
    encrypt_text = []
    msg = base64.b64encode(msg)
    for i in range(0,len(msg),ENCRY_MAX_LENGTH):
        cont = msg[i:i+ENCRY_MAX_LENGTH]
        encrypt_text.append(pk.encrypt(cont))
    # 加密完进行拼接
    cipher_text = ''.join(encrypt_text)
    # base64进行编码
    result = base64.b64encode(cipher_text)
    return result.decode()


def decrypt(msg):
    """
    私钥进行解密
    :param msg: 密文:字符串类型
    :return:  解密之后的内容
    """
    # base64解码
    msg = base64.b64decode(msg)
    # 获取私钥
    privatekey = open('private.pem').read()
    rsakey = RSA.importKey(privatekey)
    cipher = PKCS1_v1_5.new(rsakey)
    # 进行解密
    text = []
    for i in range(0,len(msg),DECRY_LENGTH):
        cont = msg[i:i+DECRY_LENGTH]
        text.append(cipher.decrypt(cont,1))
    text = ''.join(text)
    return base64.b64decode(text)

msg = "你好"*199
enc = encry(msg)
print enc
dec = decrypt(enc)
print dec

你可能感兴趣的:(RSA分段加密)