我知道RSA一次加密的字节数不能超过128个(模数),所以我把文件分块加密和解密。但是,如果我的文件大于几kb,每次运行程序时结果都会发生变化。有时整个文件被正确地加密和解密。有时只有前100行,等等。在这一点上,我想知道这是否是可靠性的问题加密.PublicKey.RSA模块。我的代码是:def encrypt(file, public_key):
read_size = 128
with open(file, 'rb') as original_file:
e_file = file + '.e'
with open(e_file, 'wb') as encrypted_file:
while True:
file_part = original_file.read(read_size)
if len(filePart) == 0:
break
encrypted_file.write(public_key.encrypt(file_part, None)[0])
os.remove(file)
def decrypt(file, private_key):
read_size = 128
with open(file, 'rb') as encrypted_file:
d_file = file[:-2]
with open(d_file, 'wb') as decrypted_file:
while True:
file_part = encrypted_file.read(read_size)
if len(filePart) == 0:
break
decrypted_file.write(private_key.decrypt(file_part))
os.remove(file)
private_key = RSA.generate(1024)
public_key = RSA.importKey(private_key.publickey().exportKey())
my_file = 'myfile.txt'
encrypt(my_file, public_key)
decrypt(my_file + '.e', private_key)
编辑:马丁的回答是有效的。这是我如何用他的答案解决问题的一个具体例子。
我使用了这个导入:
^{pr2}$
然后,我没有直接使用公钥进行加密,而是使用了以下方法:cipher = PKCS1_OAEP.new(publicKey)
encryptedFile.write(cipher.encrypt(filePart))
然后我做了类似的解密。在