InvalidToken с модулем шифрования Python - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть эта ошибка => cryptography.fernet.InvalidToken, когда я пытаюсь расшифровать содержимое моего файла в этой строке exit1 = key.decrypt(listCipher[0]).Я искал везде, но я не нашел ничего об этой проблеме.Я попытался заменить список с помощью ConfigParser, но он все еще не работает, и я не думаю, что это проблема.Некоторая помощь приветствуется.

from cryptography.fernet import Fernet

entry1 = "First_sentence"
entry2 = "Second_sentence"
entry3 = "Third_sentence"

    ##--- Key creation
firstKey = Fernet.generate_key()
file = open('.\\TEST\\key.key', 'wb') 
file.write(firstKey)
file.close()

    ##--- Cipher entries
key = Fernet(firstKey)
chiffrentry1 = key.encrypt(bytes(entry1, "utf-8"))
chiffrentry2 = key.encrypt(bytes(entry2, "utf-8"))
chiffrentry3 = key.encrypt(bytes(entry3, "utf-8"))
listAll = [chiffrentry1, chiffrentry2, chiffrentry3]

    ##-- Write cipher text in file
with open('.\\TEST\\text_encrypt.txt', 'w') as pt:
    for ligne in listAll:
        pt.write("%s\n" % ligne)

    ##--- Recover file to decrypt cipher text
listCipher = []

with open('.\\TEST\\text_encrypt.txt', 'rb') as pt:
    for line in pt:
        listCipher.append(line.strip())

exit1 = key.decrypt(listCipher[0])
exit2 = key.decrypt(listCipher[1])
exit3 = key.decrypt(listCipher[2])

print(exit1)
print(exit2)
print(exit3)

1 Ответ

0 голосов
/ 26 февраля 2019

'%s\n'%ligne изменяет ваши данные.Например, если я сделаю следующее:

>>> with open('afile.txt', 'w') as fh:
     for i in range(2):
             fh.write('%s\n'%b'hi there')

12
12
>>> with open('afile.txt', 'rb') as fh:
     for line in fh:
             print(line)

b"b'hi there'\n"
b"b'hi there'\n"

Проблема здесь заключается в преобразованиях типов, которые вы делаете.Операции Fernet ожидают bytes, и вы сохраняете зашифрованные значения как string s.Когда вы конвертируете объект bytes в string, вы не получаете точно , какой была эта строка байтов.Чтобы избежать этого, не конвертируйте типы

with open('.\\TEST\\text_encrypt.txt', 'wb') as pt:
    # join supports byte-strings
    to_write = b'\n'.join(listAll)
    pt.write(to_write)

# Now I can read a bytes object directly
with open('.\\TEST\\text_encrypt.txt', 'rb') as fh:
    # this is a single bytes-string with b'\n' chars inside it
    contents = fh.read()

# byte-strings also support split
ciphers = contents.split(b'\n')

for cipher in ciphers:
    print(key.decrypt(cipher))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...