使用 Fernet 在 Python 中实现端到端加密通信

2023-03-29 00:00:00 加密 通信 端到

使用 Fernet 在 Python 中实现端到端加密通信非常简单。Fernet 是一个对称加密算法,可以在发送方和接收方之间共享加密密钥,用于加密和解密通信内容。下面是使用 Fernet 在 Python 中实现端到端加密通信的示例:

首先,在你的 Python 项目中安装 cryptography 库:

pip install cryptography

然后,创建一个加密模块 encryption.py,用于加密和解密数据:

from cryptography.fernet import Fernet

# 密钥加密和解密时必须相同
SECRET_KEY = b'your-secret-key-here'

class Encryption:
    def __init__(self, key):
        self.key = key

    def encrypt(self, plaintext):
        fernet = Fernet(self.key)
        return fernet.encrypt(plaintext.encode())

    def decrypt(self, ciphertext):
        fernet = Fernet(self.key)
        return fernet.decrypt(ciphertext).decode()

在上述代码中,我们首先定义了 Fernet 密钥,然后创建了一个加密类 Encryption,用于加密和解密数据。在构造函数中,我们传入 Fernet 密钥。然后,我们使用 Fernet 密钥加密和解密数据。

接下来,在发送方和接收方之间,可以使用以下代码来加密和解密数据:

from encryption import Encryption
import socket

# 发送方
send_encryption = Encryption(SECRET_KEY)
plaintext = 'pidancode.com'
ciphertext = send_encryption.encrypt(plaintext)

s = socket.socket()
host = 'localhost'
port = 12345
s.connect((host, port))
s.send(ciphertext)
s.close()

# 接收方
receive_encryption = Encryption(SECRET_KEY)

s = socket.socket()
host = 'localhost'
port = 12345
s.bind((host, port))
s.listen(1)
conn, addr = s.accept()
ciphertext = conn.recv(1024)
plaintext = receive_encryption.decrypt(ciphertext)
conn.close()

在上述代码中,我们首先创建了发送方和接收方的加密类实例 send_encryption 和 receive_encryption,并传入相同的 Fernet 密钥。然后,在发送方,我们将要发送的明文 plaintext 加密为密文 ciphertext,并使用 Socket API 将密文发送到接收方。在接收方,我们使用 Socket API 接收密文,然后将其解密为明文 plaintext。

注意:在上述示例中,我们使用硬编码的 Fernet 密钥。在实际应用中,应该从安全的源头(如加密设备或密钥管理系统)获取 Fernet 密钥。

另外,我们将加密和解密逻辑封装在 Encryption 类中,以便在不同的应用场景中重复使用。在实际应用中,可以将加密和解密逻辑

相关文章