Python 中使用加密模块的 Fernet(对称加密)


对称加密是一种密码学技术,其中客户端到服务器的消息加密和解密都使用相同的密钥。为了确保在通过易受攻击的服务器传递网络数据包时不会泄漏任何敏感信息(黑客可能会利用此消息进行恶意操作),加密消息将是一个好主意。

对称加密遵循一些步骤

  • 密钥生成:为了访问消息,客户端和服务器首先生成一个密钥,并将其发送给接收方以解密加密的消息。如果密钥泄露,则存在被泄露的风险。

  • 加密:发送方通过加密程序运行未加密的消息,将其转换为密文,密文通常对人眼来说是无法理解的,如果信息无法理解,则对黑客也没有多大用处。

  • 传输:加密完成后,此密文可以通过任何不安全的通道发送,几乎不用担心数据被泄露,因为它将以密文形式发送。

  • 解密:接收方收到密文或消息后,可以使用发送方提供的密钥将密文解码为明文。

Fernet

Fernet 是一种对称加密技术,可在 Python 的加密模块中供用户使用,它使加密和解密文本变得容易,并为密码学初学者提供了一个简单的界面。

Fernet 使用高级加密标准 (AES) 算法对消息进行编码和解码。AES 是一种高度安全、广泛使用且流行的加密算法,开发人员广泛使用。

Fernet 的密文是 URL 安全的,这意味着我们可以通过万维网发送密文,从而使数据传输更加方便。

Fernet 使用随机数生成器生成一个高度安全的字母数字密钥。它是一个 32 字节长的密钥,使其高度抵御暴力破解攻击。

它还支持密钥轮换,即能够始终生成新密钥并替换旧密钥。

Fernet 支持时间戳和要与密钥一起附加的数据序列化。这样做是为了提高密钥的安全性,因为将时间戳附加到密钥将确保其有效期有限。

示例

使用 Python 中的加密模块,我们从其中导入 Fernet 函数,我们可以从中生成用于加密和解密的密钥。对消息进行编码会将其更改为密文,然后发送到接收方,接收方将使用密钥将消息转换回明文。

from cryptography.fernet import Fernet
key=Fernet.generate_key()
fernet = Fernet(key)
msg="This is a sample message".encode()
encrypted_msg=fernet.encrypt(msg)
decrypted_msg=fernet.decrypt(encrypted_msg)
decrypted_msg=decrypted_msg.decode()

print("Original Message: ", msg.decode())
print("Encrypted Message: ", encrypted_msg)
print("Decrypted Message: ", decrypted_msg)

输出

Original Message:  This is a sample message
Encrypted Message: b'gAAAAABkXM2tcyWUdIY_vIXk1vbrPgELWu2v48RRohelbOrOUJIsECT4zUPaCkPqdd80Djf9t
yqdxpbzaHBtG7hi0qle8me5BVlTv8VlJwW5scKKnnPsAAE='
Decrypted Message:  This is a sample message

结论

对称加密有很多优点

  • 效率:与非对称加密相比,它消耗更少的计算资源并且速度更快。

  • 机密性:除非知道加密代码的密钥,否则数据将安全无虞,即使黑客获取了消息,他们也无法从中推断任何信息,因为他们没有密钥。

但是,尽管它有所有优点,但它总体上在加密方面也面临着一些挑战

  • 密钥分发:对称加密的一个重要因素是发送方和接收方之间传递的密钥。应以机密方式发送密钥,以确保加密数据的安全。随着网络中用户数量的增加,确保向所有接收方安全传递所有密钥的复杂性也随之增加。

  • 密钥管理:随着参与者和加密消息数量的增加,处理和使用整个网络中多个密钥的复杂性也随之增加,以确保数据安全。

有一些方法可以解决这些挑战,混合加密方案被使用,其中对称加密用于加密数据,而非对称加密可以确保从发送方到接收方的对称密钥的安全交换。这结合了对称和非对称加密的积极应用。

更新于: 2023-08-10

3K+ 阅读量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告