Python 使用Cryptography模块的Fernet(对称加密)
对称编码是一种密码技术,是指使用相同的密钥对从客户端到服务器的消息进行加密和解密。为了确保在通过易受攻击的服务器传递网络数据包时不泄露敏感信息,将消息加密是一个不错的主意。
对称加密遵循以下一些步骤:
- 密钥生成 :为了访问消息,客户端和服务器都首先生成一个密钥,并将其发送给接收方以解密加密消息。如果密钥泄露,存在被攻击的风险。
-
加密 :发送方将明文消息通过加密程序运行,将其转换为密文,这对人眼来说通常是无法理解的,如果无法理解信息,黑客也不会有太多用处。
-
传输 :加密完成后,可以将密文通过任何不安全的通道发送,不用担心数据泄露,因为它将作为密文发送。
-
解密 :当接收到密文或消息时,接收方通过使用发送方提供给他们的密钥将密文解码为明文。
Fernet
Fernet是一个对称加密技术,位于Python的cryptography模块中,它可以方便地进行文本的加密和解密,并为密码学初学者提供简单的接口。
Fernet使用高级加密标准(AES)算法来编码和解码消息。AES是一种高度安全、被广泛使用和流行的密码学算法。
Fernet的密文是URL安全的,这意味着我们可以通过万维网发送密文,使数据传输更加方便。
Fernet使用随机数生成器生成一个高度安全的字母数字密钥。它是一个32字节长的密钥,对于暴力破解攻击具有很高的抵抗力。
它还支持密钥轮换,即能够生成新的密钥并替换旧的密钥。
Fernet支持时间戳和数据的序列化,以便与密钥一起附加。这样做是为了提高密钥的安全性,因为将时间戳附加到密钥上可以确保其有限的有效性。
示例
使用Python的cryptography模块,我们从中导入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
结论
对称加密具有许多优点:
- 效率 :与非对称加密相比,对称加密消耗较少的计算资源,速度更快。
-
机密性 :除非知道加密代码的密钥,数据才是安全的。即使黑客窃取了消息,由于他们没有密钥,他们无法从中推断出任何信息。
但是,尽管存在这些积极因素,对称加密仍然面临着一些来自加密方面的挑战:
- 密钥分发 :对称加密的一个重要因素是在发送方和接收方之间传递的秘密密钥。为了确保加密数据的安全性,密钥应该保密发送。随着网络中用户数量的增加,确保所有接收方的所有密钥都安全中继的复杂性也随之增加。
-
密钥管理 :随着参与者和加密消息数量的增加,处理和使用整个网络中多个密钥的复杂性也随之增加,以确保数据安全。
有一些方法可以解决这些挑战,使用混合加密方案,其中对称加密用于加密数据,而非对称加密可以确保发送方向接收方安全交换对称密钥。这结合了对称和非对称加密的积极应用。