Зашифровать сообщение в текстовом файле, а затем расшифровать его в python? - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь зашифровать пароль, сохранить этот пароль в текстовом файле, а затем позже я получу этот зашифрованный пароль и расшифрую его в python. Я получил шифрование, работающее и сохраняющее его в текстовом файле, однако, при попытке расшифровать его снова, он говорит:

AttributeError: объект 'str' не имеет атрибута 'decode'. Я скопировал и вставил зашифрованное сообщение, которое было в байтах, я думаю, в текстовый файл, поэтому я не уверен, как еще его расшифровать.

salt = b'salt123'
kdf = PBKDF2HMAC(
    algorithm=hashes.SHA256(),
    length=32,
    salt=salt,
    iterations=100000,
    backend=default_backend()
)

test_password = 'test123'.encode()
key = base64.urlsafe_b64encode(kdf.derive(test_password))
f = Fernet(key)
encrypted = f.encrypt(test_password) #This is the encrypted password which I copy and pasted into the text file

password = []
f = open("Passwords.txt", "r")
if f.mode == 'r':
    for line in f:
        password.append(line)
f.close()

#password[2] is the encrypted password 
decrypted_pass = f.decrypt(password[2]) #Error AttributeError: 'str' object has no attribute 'decode'

РЕДАКТИРОВАТЬ: допущена ошибка, означающая расшифровку в последней строке, а не декодирование

1 Ответ

1 голос
/ 04 февраля 2020

Ваш код не имеет смысла. Конечно, вы можете зашифровать свой пароль, используя ключ, полученный из вашего пароля. Однако для его расшифровки вам снова понадобится оригинальный пароль. Если у вас есть этот пароль, вам не нужно расшифровывать его снова. Вам крайне необходимо ознакомиться с PBKDF2 и узнать, как его можно использовать для хеширования пароля.

Затем вы сохраняете зашифрованный пароль и пытаетесь декодировать его, как если бы это была закодированная строка байтов, т.е. bytes или bytearray. Это не имеет смысла, кодировка символов преобразуется из строки в байты, а декодирование символов - это преобразование из байтов в строку (используя определенный c набор символов ). Читайте также о кодировке символов.

Возможно, источником ошибки является то, что вы заменяете экземпляр Fe rnet файлом в переменной f. Используйте для них переменные с разными именами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...