我是 python 的新手,我正在开发一个加密文本字符串,然后将其保存到文件的程序。当我在同一个会话中加密然后解密它时,我的程序运行良好。我想做的是:加密文件,然后关闭程序,稍后再回来解密。我不知道密码学模块是如何工作的,但判断它是如何被称为“密钥”的,我认为它对安全性很重要,但我不知道。当我尝试将 fernet 密钥保存到文本文件时,它会显示一条错误消息。当我尝试解密在前一个会话中加密的消息时,它会显示 4 个引用加密模块的错误。最后,我想知道是否可以使用加密模块在会话之间解密数据。如果不,有没有其他方法可以完成这项任务?谢谢你的帮助。这是我的代码:
from cryptography.fernet import Fernet
key = Fernet.generate_key()
f = Fernet(key)
sel = input("Would you like to encrypt or decrypt? (1 = encrypt, 2 = decrypt) ")
if sel == 1:
inp = raw_input("Enter Text: ") # Type here
encoded = f.encrypt(inp)
a, b = encoded[:len(encoded)/2], encoded[len(encoded)/2:]
print ("YOUR PASSWORD: ")
print b
file = open('password.txt', 'w')
file.write(a)
elif sel == 2:
inp = raw_input("Enter Password: ")
file = open('password.txt', 'r')
a = file.readline()
combine = (a + inp)
out = f.decrypt(combine)
print out
这是当您从上一个会话中输入“密码”时发生的错误:
Traceback (most recent call last):
File "/Users/Zak/PycharmProjects/Password/test.py", line 18, in <module>
out = f.decrypt(combine)
File "/Users/Zak/PycharmProjects/Password/venv/lib/python2.7/site-packages/cryptography/fernet.py", line 75, in decrypt
return self._decrypt_data(data, timestamp, ttl)
File "/Users/Zak/PycharmProjects/Password/venv/lib/python2.7/site-packages/cryptography/fernet.py", line 119, in _decrypt_data
self._verify_signature(data)
File "/Users/Zak/PycharmProjects/Password/venv/lib/python2.7/site-packages/cryptography/fernet.py", line 108, in _verify_signature
raise InvalidToken
cryptography.fernet.InvalidToken
这也是当您编辑代码以将密钥保存到空白 .txt 文件时发生的情况。请记住,此错误不反映上面的代码。
Traceback (most recent call last):
File "/Users/Zak/PycharmProjects/Password/test.py", line 5, in <module>
file.write(f)
TypeError: expected a character buffer object