在文本文件中加密消息,然后在Python中解密?

问题描述 投票:0回答:2

我正在尝试加密一个密码,将该密码存储在一个文本文件中,然后我将检索该加密密码并在 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'

编辑:犯了一个错误,意味着在最后一行解密而不是解码

python file encryption
2个回答
1
投票

你的代码没有任何意义。您当然可以使用从您的密码派生的密钥来加密您的密码。但是,要解密它,您需要再次输入原始密码。如果您有此密码,则无需再次解密。您迫切需要阅读 PBKDF2 以及如何将其用于密码哈希。

然后存储加密的密码,并尝试将其解码,就像它是编码的字节字符串一样,即

bytes
bytearray
。这是没有意义的,字符编码是从字符串转换为字节,而字符解码是从字节到字符串的转换(使用特定的字符集)。还要阅读字符编码。

错误的根源可能是您正在用变量

f
中的文件替换 Fernet 实例。为这些使用不同命名的变量。


0
投票

尝试 pycryp,它是一个用于编码和解码数据的包

安装

pip install pycryp

编码

import pycryp
message = "Hello, World!"
password = "password"
print(pycryp.encrypt(message, password))
#b'gAAAAABl6ym8taGz9n254R0nwIQ2nnMJ19LvgTMItPiTJeJYCeysfIarDwGXZRdyw39iOtPxi91QDRGtGIiLTBgZUEHk1_iTGQ=='

解码

import pycryp
encrypted_message = "b'gAAAAABl6ym8taGz9n254R0nwIQ2nnMJ19LvgTMItPiTJeJYCeysfIarDwGXZRdyw39iOtPxi91QDRGtGIiLTBgZUEHk1_iTGQ=='"
password = "password"
print(pycryp.decrypt(encrypted_message, password))
#b'Hello, World!'

编码后将数据转储到文件或解码前从文件中读取数据

© www.soinside.com 2019 - 2024. All rights reserved.