使用cryptography.fernet解密消息不起作用



我刚试过加密和解密数据。我首先生成了一个密钥,然后用它加密数据并将其保存到一个XML文件中。现在,这些数据已被读取,应该再次解密。

但现在我收到错误消息";cryptography.fernet.InvalidToken";。

import xml.etree.cElementTree as ET
from cryptography.fernet import Fernet
from pathlib import Path
def load_key():
"""
Load the previously generated key
"""
return open("../login/secret.key", "rb").read()
def generate_key():
"""
Generates a key and save it into a file
"""
key = Fernet.generate_key()
with open("../login/secret.key", "wb") as key_file:
key_file.write(key)
def decrypt_message(encrypted_message):
"""
Decrypts an encrypted message
"""
key = load_key()
f = Fernet(key)
message = encrypted_message.encode('utf-8')
decrypted_message = f.decrypt(message)
return(decrypted_message)
def decryptMessage(StringToDecrypt):
decryptedMessage = decrypt_message(StringToDecrypt)
return decryptedMessage
def loginToRoster(chrome):
credentials = readXML()
user = decryptMessage(credentials[0])
pw = decryptMessage(credentials[1])
userName = chrome.find_element_by_id('UserName')
userName.send_keys(user)
password = chrome.find_element_by_id('Password')
password.send_keys(pw)

在元组"中;凭证";存在2个加密的字符串。

请帮忙-我已经尝试了一切来更改格式,但没有机会。

编辑:

错误消息:

Traceback (most recent call last):
File "C:/Users/r/Documents/GitHub/ServiceEvaluationRK/source/main.py", line 27, in <module>
login.loginToRoster(chrome)
File "C:UsersrDocumentsGitHubServiceEvaluationRKsourcelogin.py", line 106, in loginToRoster
user = decryptMessage(credentials[0])
File "C:UsersrDocumentsGitHubServiceEvaluationRKsourcelogin.py", line 49, in decryptMessage
decryptedMessage = decrypt_message(StringToDecrypt)
File "C:UsersrDocumentsGitHubServiceEvaluationRKsourcelogin.py", line 43, in decrypt_message
decrypted_message = f.decrypt(message)
File "C:UsersrDocumentsGitHubServiceEvaluationRKvenvlibsite-packagescryptographyfernet.py", line 75, in decrypt
timestamp, data = Fernet._get_unverified_token_data(token)
File "C:UsersrDocumentsGitHubServiceEvaluationRKvenvlibsite-packagescryptographyfernet.py", line 107, in _get_unverified_token_data
raise InvalidToken
cryptography.fernet.InvalidToken

我找到了问题的答案:

我服用了ASCII而不是utf-8。并且我在函数"0"处添加了CCD_ 3;登录到名册";到变量"user"one_answers"pw">

现在加密和解密工作正常。

因此,"登录到名册"功能看起来像:

def loginToRoster(chrome):
credentials = readXML()
user = decryptMessage(credentials[0]).decode('ASCII')
pw = decryptMessage(credentials[1]).decode('ASCII')
userName = chrome.find_element_by_id('UserName')
userName.send_keys(user)
password = chrome.find_element_by_id('Password')
password.send_keys(pw)

您在decrypt_message函数中的load_key()定义在哪里。它不是一个方法,它只是一个未定义的函数。您可能会出现此错误,因为密钥无效,因为您没有得到保存的密钥。

最新更新