如何在Python中加密和解密数据
阅读更多:Python 教程
介绍
什么是密码学?密码学涉及将明文转换为密文,这称为数据加密,将密文转换为明文,这称为数据解密。
我们将使用密码学包中的 Fernet模块 来使用Python加密和解密数据。在使用Fernet模块时,会生成一个唯一的密钥,如果没有该密钥,您将无法读取或操作已加密数据。
现在,您知道我们将要处理什么,让我们开始吧。
入门
密码学模块未与Python捆绑在一起,这意味着您必须使用pip软件包管理器安装它。为此,请启动终端并键入以下代码。
pip install cryptography
一旦您已下载并安装了该软件包,就可以导入其模块了。
我们将使用Fernet模块来加密和解密数据。因此,让我们将其导入Python脚本中。
from cryptography.fernet import Fernet
注意 − 确保大小写正确。
您已准备好开始编写脚本了。
生成密钥
为了开始加密数据,您必须首先创建一个 Fernet密钥 。
key = Fernet.generate_key()
f = Fernet(key)
在以上代码中,我们使用generate_key()方法生成了一个密钥,然后将该密钥分配给下一行中的变量“f”。
就是这样,您现在有一个存储在变量中的密钥可以使用。
如果需要,我们可以打印并存储密钥。确保在打印时使用decode函数。
print(key.decode())
输出
Bq64GE-93K1RVro4go1frN-8twBSvXdbCPSPLIKz9U=
加密数据
为了从以上密钥加密数据,您必须使用加密方法。
encrypted_data = f.encrypt(b"此消息正在被加密,不能被查看!")
那就是它,以上句子已被加密。
要查看您的加密消息,您必须打印它。
print(encrypted_data)
输出
b'gAAAAABgILy91p_wqMntdT3mDkh0IBXSLjuBMQAfnGZAFkZCX1U6Q7TU2PthgFBwVz0QbKXpuNTHRzAgbdDV4zfuuzkGCXqVD--xJdkTycKH2iurC_oqHySLc9xJEXz93LkhTbKUa5HCxfJtB-Um_YkxqjclftXXZQ=='
注意 − 我们在句子前加了b,以将其转换为字节格式。您也可以选择使用encode()方法。
解密数据
现在,您有了密文,让我们看看如何将其转换回普通可读文本。
我们可以使用Fernet模块中的decrypt方法来实现解密。
decrypted_data = f.decrypt(encrypted_data)# f是具有密钥值的变量。
print(decrypted_data)
输出
b'此消息正在被加密,不能被查看!'
− 如果您查看上面的输出,您会注意到打印纯文本之前有b’,这是因为已加密数据正在转换回字节格式。为了获得纯文本,我们需要使用decode函数。
print(decrypted_data.decode())
输出
此消息正在被加密,不能被查看!
注意− 您可以使用相同的密钥加密和解密数据。也就是说,如果打印密钥的值并保存它。您可以通过将其分配给变量来使用相同的密钥。 例如−>
f = Fernet(Bq64GE--93K1RVro4go1frN-8twBSvXdbCPSPLIKz9U=) #给出实际密钥的值。
示例
from cryptography.fernet import Fernet
key = Fernet.generate_key()
print("Key : ", key.decode())
f = Fernet(key)
encrypted_data = f.encrypt(b"这个信息正在加密中,无法被查看!")
print("加密后: ", encrypted_data)
decrypted_data = f.decrypt(encrypted_data)
print(decrypted_data)
print("解密后: ", decrypted_data.decode())
输出
Key : u4dM7xw8sNNU3Rm_lwDbixudWSeaM0Z4TTDdQNKsouI=
加密后: b'gAAAAABgIL3_qbfM_oMgQn653gpk6a7hqxXiR0dl0vrmOmqnr5b6MqrsjGkK1IknxMLLtOCq6_YlX4x3nBedbZqtCqy4os55pttrl-pBO6-dJf6kVP50IpIaKSXbpAsuWl4h_2o_E-4YEqZ5kkgxWrwnqojmkMyuSQ=='
b'这个信息正在加密中,无法被查看!'
解密后: 这个信息正在加密中,无法被查看!
结论
您现在已经学会了使用Python中的cryptography包加密和解密数据。
您甚至可以将密钥保存为.txt文件,然后检索它以加密和存储密码,或从数据库解密密码以验证是否匹配。无论是小型项目还是大型项目,都可以在各种其他情况下使用此功能。
有关cryptography模块的更多信息,您可以阅读他们的官方文档 https://pypi.org/project/cryptography/