首页 > 其他分享 >加密通信

加密通信

时间:2023-09-15 21:56:30浏览次数:47  
标签:加密 socket plaintext encrypted 通信 key input

加密通信

服务端:

# 导入 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 属性文本

标签:加密,socket,plaintext,encrypted,通信,key,input
From: https://www.cnblogs.com/bumper/p/17705756.html

相关文章

  • C#实现RSA加密与解密、签名与认证
    https://www.cnblogs.com/itjeff/p/8953308.html一、RSA简介RSA公钥加密算法是1977年由RonRivest、AdiShamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为......
  • 关于Azure-4层-负载均衡器的-Inbound NAT rules-入站NAT规则-通信的数据包抓取-分析
    关于Azure-4层-负载均衡器的-InboundNATrules-入站NAT规则-通信的数据包-分析先说一下客户端-负载均衡器-真实的后端主机,环境信息如下:客户端的IP地址:192.168.20.4入站NAT前端IP:192.168.10.100后端服务器的IP :192.168.10.5+++++++++++++++++++++++++++++++++++++++++++......
  • 用源码创建虚拟资源加密平台,扫码支付获取资源
    大家都知道,八图片是一个可以对图片或网址进行二维码加密的网络平台,很多人利用这个平台的加密功能,自动化的出售虚拟产品。你可以将任何资源或产品隐藏在加密地址的后面,让用户扫码支付后获取。这个网站不仅提供了加密的功能,还提供了一套简化版的源码,可以利用这个源码,搭建一个一模一......
  • socket通信
    #coding=utf-8#安装websocket相关库#pipinstallwebsocket#pipinstallwebsocket-clientimportjsonimportwebsocketfromthreadingimportThreadimporttimedefon_message(ws,message):print(json.loads(message))defon_error(ws,error):p......
  • udp通信中变长结构体的存在意义?
    在UDP通信中,使用变长结构体(又称为灵活数组成员)的存在意义是为了在不固定大小的数据报中传输可变长度的数据。在你的示例中,结构体定义了一个变长结构体,其中包含一个整型变量`size`和一个大小为0的字符数组`data`。通过将字符数组大小设置为0,你可以根据实际数据的长度在运行时分......
  • js浏览器通信postMessage
    1、背景:一个应用中内嵌了iframe,外层应用需要知道iframe做了一些具体的操作来更新页面,所以需要用到postMessage2、代码模块发起方:window.parent.postMessage({type:'sign-event',//事件名,内外层统一data:{data:data//需要传递的参数},......
  • c# mvc+RSA 加密
    密钥生成:http://web.chacuo.net/netrsakeypair生成一套密钥 前端引用 <scriptsrc="https://cdn.bootcdn.net/ajax/libs/jsencrypt/3.3.2/jsencrypt.min.js"></script>functionEncryptLogin(){varpublicKey="";varencrypt......
  • Vue学习四:组件的三大组成部分、组件通信和进阶语法
    一、组件的三大组成部分<template>里面只能有一个根元素<style>全局样式(默认):影响所有组件局部样式:scoped下样式,只作用于当前组件<script>el根实例独有,data是一个函数,其他配置项一致二、scoped设置局部样式默认情况:写在组件中的样式会全局生效→因此很容易造成多......
  • 应用层通信协议设计
    一、应用层通信协议概述TCP/UDP是基于字节流的传输层通信协议,对于其的编程是基于IO流编程,所谓“流”,就是没有界限的一长串二进制数据。TCP/UDP作为传输层协议,并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行数据包的划分。所以在业务上一个完整的数据包在进行传......
  • 逆向使用的公共加密解密的方法与算法
    python的AES加密解密方法-ECB模式fromCrypto.CipherimportAESimportbase64fromCrypto.Util.Paddingimportunpad,paddefdecrypt_aes(ciphertext,key):ciphertext=base64.b64decode(ciphertext)#使用base64解码密文cipher......