加密通信
服务端:
# 导入 socket 模块
import socket
# 定义异或加密函数,输入明文和密钥,返回加密后的密文
def xor_encrypt(plaintext, key):
# 将明文和密钥转换为二进制
plaintext = plaintext.encode()
key = key.encode()
# 创建一个空的字节数组,用于存储加密后的数据。
ciphertext = bytearray()
# 使用异或加密
for i in range(len(plaintext)):
byte = plaintext[i] ^ key[i % len(key)]
ciphertext.append(byte)
return bytes(ciphertext)
# 定义服务器的 IP 地址和端口号
ip = "10.22.223.121"
port = 25000
# 创建一个 TCP/IP 套接字并绑定到指定的端口号
serve = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serve.bind((ip, port))
# 开始监听连接请求
serve.listen()
while True:
# 接受客户端连接,并返回连接对象与地址信息
conn, address = serve.accept()
while True:
try:
# 接收客户端发送的数据并解密
encrypted_data = conn.recv(255)
if not encrypted_data:
# 如果没有接收到数据,则跳出循环
break
data = xor_encrypt(encrypted_data.decode(), "Fe!EdoWmh^w=U43SO*-#7CZyLRJHjAds").decode()
print(data)
# 加密并发送数据
input_str = input("请输入要发送的字符串:")
if not input_str:
# 如果没有输入数据,则跳出循环
break
encrypted_input = xor_encrypt(input_str, "Fe!EdoWmh^w=U43SO*-#7CZyLRJHjAds")
conn.send(encrypted_input)
except ConnectionResetError:
# 如果连接重置,则关闭连接并跳出循环
conn.close()
break
# 关闭连接
conn.close()
客户端:
# 导入 socket 模块
import socket
# 定义异或加密函数,输入明文和密钥,返回加密后的密文
def xor_encrypt(plaintext, key):
# 将明文和密钥转换为二进制
plaintext = plaintext.encode()
key = key.encode()
# 创建一个空的字节数组,用于存储加密后的数据。
ciphertext = bytearray()
# 使用异或加密
for i in range(len(plaintext)):
byte = plaintext[i] ^ key[i % len(key)]
ciphertext.append(byte)
return bytes(ciphertext)
# 定义服务器的 IP 地址和端口号
ip = "10.22.223.121"
port = 25000
# 创建一个 TCP/IP 套接字并连接到指定的地址和端口号
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((ip, port))
while True:
try:
# 加密并发送数据
input_str = input("请输入要发送的字符串:")
if not input_str:
# 如果没有输入数据,则跳出循环
break
encrypted_input = xor_encrypt(input_str, "Fe!EdoWmh^w=U43SO*-#7CZyLRJHjAds")
client.send(encrypted_input)
# 接收服务器返回的数据并解密
encrypted_data = client.recv(255)
if not encrypted_data:
# 如果没有接收到数据,则跳出循环
break
data = xor_encrypt(encrypted_data.decode(), "Fe!EdoWmh^w=U43SO*-#7CZyLRJHjAds").decode()
print(data)
except ConnectionResetError:
# 如果连接重置,则关闭连接并跳出循环
client.close()
break
# 关闭连接
client.close()
这里所用的加密方式只是简单的异或加密,实际中所用的加密函数要比其复杂的多的多的多得多。
结果展示:
服务端开启服务,客户端连接。
客户端发送hello,服务端接收:
服务端回复:hi,客户端收到:
最终功能展示:
标签:加密,socket,plaintext,encrypted,通信,key,input From: https://www.cnblogs.com/bumper/p/17705756.html