Вот некоторые функции шифрования и дешифрования, которые я создал для библиотеки управления ключами Python, которую я пишу.
def generate_RSA():
bits = 2048
new_key = RSA.generate(bits)
public_key = new_key.publickey()
private_key = new_key
return private_key, public_key
def encrypt_data(in_fd, chunk_size, pub_key):
encryptor = PKCS1_OAEP.new(pub_key)
A = list()
with open(in_fd, 'rb') as in_file:
while True:
chunk = in_file.read(chunk_size)
if len(chunk) == 0:
break
elif len(chunk) % 16 != 0:
chunk += b' ' * (16 - len(chunk) % 16)
encrypted_file = encryptor.encrypt(chunk)
return encrypted_file
def decrypt_data(in_fd, chunk_size, priv_key):
decryptor = PKCS1_OAEP.new(priv_key)
with open(in_fd, 'rb') as in_file:
while True:
chunk = in_file.read(chunk_size)
if len(chunk) == 0:
break
decrypted_file = decryptor.decrypt(eval(str(chunk)))
return decrypted_file
Я хотел иметь возможность вставлять encrypt_data и decrypt_data друг в друга в качестве первых аргументов, если это необходимо.Однако я сталкиваюсь с проблемой.
priv_key, pub_key = generate_RSA()
print(decrypt_data(encrypt_data('C:\\Users\cowbo\OneDrive\Documents\EWC\Haiku.txt', 8192, pub_key), 8192, priv_key))
Всякий раз, когда я пытаюсь запустить последнюю строку кода, я получаю следующую трассировку ...
Traceback (most recent call last):
File "C:\Users\cowbo\source\repos\Python Practice\PythonPractice\FileCounter.py", line 57, in <module>
print(decrypt_data(encrypt_data('C:\\Users\cowbo\OneDrive\Documents\EWC\Haiku.txt', 8192, pub_key), 8192, priv_key))
File "C:\Users\cowbo\source\repos\Python Practice\Python Practice\FileCounter.py", line 31, in decrypt_data
with open(in_fd, 'rb') as in_file:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfd in position 1: invalid start byte
Я посмотрел другой пост, посвященный этой же проблеме, иЯ, кажется, шифрую и дешифрую правильно, поэтому я не уверен, в чем проблема.