加密通信

服务端:

# 导入 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,客户端收到:

最终功能展示: