加密通信

加密通信

服务端:

# 导入 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()

这里所用的加密方式只是简单的异或加密,实际中所用的加密函数要比其复杂的多的多的多得多。

结果展示:

服务端开启服务,客户端连接。

alt 属性文本

客户端发送hello,服务端接收:

alt 属性文本

服务端回复:hi,客户端收到:

alt 属性文本

最终功能展示:

alt 属性文本


__EOF__

本文作者bumper
本文链接https://www.cnblogs.com/bumper/p/17705756.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   bumper  阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示