我正在尝试加密一个密码,将该密码存储在一个文本文件中,然后我将检索该加密密码并在 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'
编辑:犯了一个错误,意味着在最后一行解密而不是解码
你的代码没有任何意义。您当然可以使用从您的密码派生的密钥来加密您的密码。但是,要解密它,您需要再次输入原始密码。如果您有此密码,则无需再次解密。您迫切需要阅读 PBKDF2 以及如何将其用于密码哈希。
然后存储加密的密码,并尝试将其解码,就像它是编码的字节字符串一样,即
bytes
或bytearray
。这是没有意义的,字符编码是从字符串转换为字节,而字符解码是从字节到字符串的转换(使用特定的字符集)。还要阅读字符编码。
错误的根源可能是您正在用变量
f
中的文件替换 Fernet 实例。为这些使用不同命名的变量。
尝试 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!'
编码后将数据转储到文件或解码前从文件中读取数据