如何防止某人打印cryptography.fernet软件包中的解密密码

问题描述

我是本模块的新手,所以如果我的问题听起来很傻,请原谅。我正在创建一个应用程序,并使用cryptography.fernet加密MysqL凭据。

例如,如果我加密并获得此密码

from cryptography.fernet import Fernet
key = b'PCHl_MjGyEyBxLYha3S-cWg_SDDmjT4YYaKYh4Z7Yug='
cipher_suite = Fernet(key)
ciphered_text = cipher_suite.encrypt(b"sqlShack@DemoPass")   
print(ciphered_text)

如果必须按如下所示解密密码,如何防止最终用户仅打印密码?他们可以只打印打印内容(unciphered_text)。将密码保存到数据库也无法达到目的,因为我的密码是用于数据库。谢谢您的高级帮助。

key = b'PCHl_MjGyEyBxLYha3S-cWg_SDDmjT4YYaKYh4Z7Yug='
cipher_suite = Fernet(key)
ciphered_text = b'gAAAAABd_jcLWEz-fIBt3y2P3IoB3jGdbnnSzeSINZ8BomP9DrKIX2YF4pMLkMCvCxLshmKgKXk7np42xop6QIaiawbhjGayMU0UrbTeUX-6XA8zmo55vwA='
unciphered_text = (cipher_suite.decrypt(ciphered_text))

我只想在我的代码中这样做

try:
  engine = create_engine('MysqL+MysqLconnector://root:encrypted_password@encrypted_host:3306/encrypted_databsed?auth_plugin=MysqL_native_password')

except engine.closed():
    print("Failed to create engine")

解决方法

如果必须按如下所示解密密码,如何防止最终用户简单地打印出密码?

实际上-您不能。

我正在创建一个应用程序,并使用cryptography.fernet加密MySQL凭据。

理论上,您可以编写一个返回数据库连接的库,而不是明文密码。但是,一旦您将密文和密钥放在同一位置(在客户端),则无论如何都不会阻止客户端解密和打印明文。