用python写一个简单的即时通讯加密系统
时间: 2024-03-02 08:49:58 浏览: 101
chat.rar_ICQ/即时通讯_Python_
好的,我可以给您提供一个简单的即时通讯加密系统的示例代码,使用Python实现。该系统使用了AES对称加密算法和socket网络通信模块。
以下是示例代码:
服务端代码:
```python
import socket
from Crypto.Cipher import AES
import os
# 加密函数
def encrypt(message):
key = os.urandom(16)
cipher = AES.new(key, AES.MODE_EAX)
nonce = cipher.nonce
ciphertext, tag = cipher.encrypt_and_digest(message.encode('utf-8'))
return (key, nonce, ciphertext, tag)
# 解密函数
def decrypt(key, nonce, ciphertext, tag):
cipher = AES.new(key, AES.MODE_EAX, nonce=nonce)
plaintext = cipher.decrypt_and_verify(ciphertext, tag)
return plaintext.decode('utf-8')
# 创建socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
port = 9999
s.bind((host, port))
s.listen(5)
# 等待客户端连接
print('等待客户端连接...')
client_socket, addr = s.accept()
print('连接已建立:', addr)
# 加密并发送消息
message = input('请输入要发送的消息:')
encrypted_message = encrypt(message)
client_socket.send(str(encrypted_message).encode())
# 接收并解密消息
data = client_socket.recv(1024)
key, nonce, ciphertext, tag = eval(data.decode())
decrypted_message = decrypt(key, nonce, ciphertext, tag)
print('收到的消息:', decrypted_message)
# 关闭连接
client_socket.close()
```
客户端代码:
```python
import socket
from Crypto.Cipher import AES
import os
# 加密函数
def encrypt(message):
key = os.urandom(16)
cipher = AES.new(key, AES.MODE_EAX)
nonce = cipher.nonce
ciphertext, tag = cipher.encrypt_and_digest(message.encode('utf-8'))
return (key, nonce, ciphertext, tag)
# 解密函数
def decrypt(key, nonce, ciphertext, tag):
cipher = AES.new(key, AES.MODE_EAX, nonce=nonce)
plaintext = cipher.decrypt_and_verify(ciphertext, tag)
return plaintext.decode('utf-8')
# 创建socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
port = 9999
# 连接服务端
s.connect((host, port))
# 接收并解密消息
data = s.recv(1024)
key, nonce, ciphertext, tag = eval(data.decode())
decrypted_message = decrypt(key, nonce, ciphertext, tag)
print('收到的消息:', decrypted_message)
# 加密并发送消息
message = input('请输入要发送的消息:')
encrypted_message = encrypt(message)
s.send(str(encrypted_message).encode())
# 关闭连接
s.close()
```
这个示例代码中,服务端和客户端都有一个加密函数`encrypt`和一个解密函数`decrypt`。这些函数使用AES对称加密算法对消息进行加密和解密,确保消息的安全性。
在服务端代码中,首先创建一个socket对象,并监听端口9999。当有客户端连接时,程序会等待用户输入要发送的消息,然后对消息进行加密并发送给客户端。
在客户端代码中,首先创建一个socket对象,并连接到服务端的主机和端口。程序接收到服务端发送的加密消息后,会对消息进行解密并输出。然后程序会等待用户输入要发送的消息,对消息进行加密并发送给服务端。
当连接结束后,程序会关闭socket连接。注意,这个示例代码只是一个简单的示例,实际应用中还需要做更多的安全性处理。
阅读全文