Во-первых, извините, у меня так много вопросов по этой проблеме, и я утонул во многих ответах, но я все еще не получил его, потому что мой код работает, только если я пишу в файл (?)
Итак, почему это работает:
# encrypt and write to file
data_to_encrypt = "mytext"
data = data_to_encrypt.encode('utf-8')
ciphered_bytes = cipher_encrypt.encrypt(data)
ciphered_data = ciphered_bytes
print(ciphered_data)
with open(fileConfigBIN, "wb") as binary_file:
binary_file.write(ciphered_data)
# read the file and decrypt
with open(fileConfigBIN, "rb") as binary_file:
data1 = binary_file.read()
print(data1)
deciphered_bytes = cipher_decrypt.decrypt(data1)
decrypted_data = deciphered_bytes.decode('utf-8')
print(decrypted_data)
Вывод:
b '\ xa0U \ xee \ xda \ xa8R'
b ' \ xa0U \ xee \ xda \ xa8R '
mytext
Но просто комментируя запись в файл (файл все еще там с той же информацией):
#data_to_encrypt = "mytext"
#data = data_to_encrypt.encode('utf-8')
#ciphered_bytes = cipher_encrypt.encrypt(data)
#ciphered_data = ciphered_bytes
#print(ciphered_data)
#with open(fileConfigBIN, "wb") as binary_file:
# binary_file.write(ciphered_data)
with open(fileConfigBIN, "rb") as binary_file:
data1 = binary_file.read()
print(data1)
deciphered_bytes = cipher_decrypt.decrypt(data1)
decrypted_data = deciphered_bytes.decode('utf-8')
print(decrypted_data)
Я получаю это:
b '\ xa0U \ xee \ xda \ xa8R'
Исключение в обратном вызове Tkinter (последний вызов в последний раз): Файл "C : \ Users ................... \ Python37-32 \ lib \ tkinter__init __. Py ", строка 1705, в вызов , возврат self.fun c (* args) Файл "C: \ Users \ Fabio \ source .............", строка 141, в AbrirConfig decrypted_data = deciphed_bytes.decode ('utf-8') UnicodeDecodeError: код «utf-8» c не может декодировать байт 0xdd в позиции 1: недопустимый байт продолжения
прочитанный код используется g тот же файл, что и закомментированная часть, сохраните его!
Я пытался сохранить и прочитать в 'latin-1', 'ISO-8859-1' и других .. он не дает ошибок, но возвращает просто странно символы
Использование Python 3.7
Спасибо заранее!
РЕДАКТИРОВАТЬ:
Полный рабочий минимальный код:
from Crypto.Cipher import AES
fileConfigBIN = "data.dat"
key = b'\x16\x18\xed\x1c^\xaaGN\rl\xc0]\xf0t=\xd0\xdc]t\xaf\xb2\x12,\xe6\xfc\xd6\x11-\x10\xb4\xb1\x0b'
cipher_encrypt = AES.new(key, AES.MODE_CFB)
iv = cipher_encrypt.iv
cipher_decrypt = AES.new(key, AES.MODE_CFB, iv=iv)
def Encrypt():
data_to_encrypt = "MyTextToEncrypt"
data = data_to_encrypt.encode('utf-8')
ciphered_bytes = cipher_encrypt.encrypt(data)
ciphered_data = ciphered_bytes
with open(fileConfigBIN, "wb") as binary_file:
binary_file.write(ciphered_data)
print("CRYPTED DATA SAVED TO FILE: ", str(ciphered_data))
def Decrypt():
with open(fileConfigBIN, "rb") as binary_file:
data1 = binary_file.read()
print("DATA READ FROM FILE: ", data1)
deciphered_bytes = cipher_decrypt.decrypt(data1)
decrypted_data = deciphered_bytes.decode('utf-8')
print("DECRYPTED DATA: ", decrypted_data)
Encrypt() #comment this function to show the problem
print('---------------------')
Decrypt()
Я сделал это, ребята! Благодаря @ Hoen ie insight для каждого шифрования я сохраняю значение iv и использую его для расшифровки при необходимости. Если случится необходимость зашифровать снова, это сохранит еще одно значение iv и так далее ... Спасибо, спасибо!