python - 使用 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:\Users\r\Documents\GitHub\ServiceEvaluationRK\source\login.py", line 106, in loginToRoster
user = decryptMessage(credentials[0])
File "C:\Users\r\Documents\GitHub\ServiceEvaluationRK\source\login.py", line 49, in decryptMessage
decryptedMessage = decrypt_message(StringToDecrypt)
File "C:\Users\r\Documents\GitHub\ServiceEvaluationRK\source\login.py", line 43, in decrypt_message
decrypted_message = f.decrypt(message)
File "C:\Users\r\Documents\GitHub\ServiceEvaluationRK\venv\lib\site-packages\cryptography\fernet.py", line 75, in decrypt
timestamp, data = Fernet._get_unverified_token_data(token)
File "C:\Users\r\Documents\GitHub\ServiceEvaluationRK\venv\lib\site-packages\cryptography\fernet.py", line 107, in _get_unverified_token_data
raise InvalidToken
cryptography.fernet.InvalidToken
解决方案
我找到了我的问题的答案:
我ASCII
代替了utf-8
. 我.decode('ASCII')
在函数“loginToRoster”中添加了一个变量“user”和“pw”
现在加密和解密工作正常。
因此,“loginToRoster”函数如下所示:
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)
推荐阅读
- python-3.x - 使用 Python 在特定行中删除具有特定字符串的列
- html - 为什么带有文本的 div 不适合文本尺寸?
- python - 根据存在 Pandas 添加行
- html - 带有特殊字符\n \r的HTML代码,如何正确显示
- sql-server - 在 sql server 升级之前要检查哪些所有配置?
- android - 如何知道android项目构建是由Android Studio还是命令行触发的?
- php - json_decode 使用经过验证的 json 数据返回 NULL,错误:“控制字符错误,可能编码不正确”
- http - 使用特定证书加密网站链接
- ajax - Symfony 表单返回 CSRF 令牌对 AJAX 请求无效
- javascript - 如何添加自定义属性,如隐藏