M2Crypto库Python中非常方便的RSA加密库,但提供的API并没有对长数据进行分段加密,如果RSA密钥选择1024位,那么要加密的数据最大长度为117,如果不处理会报RSA.RSAError: data too large for key size错误,我们在基础上做个修改,可以达到要求
# -*- coding: UTF-8 -*-
import M2Crypto
import base64
import sys
def encrypt_pri(msg, file):
rsaPri = M2Crypto.RSA.load_key(file)
buffer = []
while msg: #分段进行加密
input = msg[:117]
tmp = rsaPri.private_encrypt(input, M2Crypto.RSA.pkcs1_padding) #加密填充方式为pkcs1_padding
buffer.append(tmp)
msg = msg[117:]
data = base64.b64encode(''.join(buffer))
return data
def decrypt_pub(msg, file):
rsaPub = M2Crypto.RSA.load_pub_key(file)
ctxt_pri = msg.decode("base64") # 先将str转成base64
buffer = []
while ctxt_pri:
input = ctxt_pri[:128]
ctxt_pri = ctxt_pri[128:]
tmp = rsaPub.public_decrypt(input, M2Crypto.RSA.pkcs1_padding)
buffer.append(tmp)
return ''.join(buffer)
if __name__