import socket import math import random

def get_calculation(p, a, X): # 计算 Y Y = pow(a, X, p) return Y

def get_generator(p): # 获取模 p 的原根 a = 2 generators = [] while a < p: flag = 1 while flag != p: if pow(a, flag, p) == 1: break flag += 1 if flag == (p - 1): generators.append(a) a += 1 return generators

def get_key(X, Y, p): # 获取交换计算数后的密钥 key = pow(Y, X, p) return key

def Client(x): # 客户端发送数据 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) host = '127.0.0.1' port = 8088 client.connect((host, port)) send_msg = x client.send(str(send_msg).encode('utf-8')) msg = client.recv(1024) client.close() return msg

if name == 'main': print('这里是客户端!') print('-' * 20) p = 23 # 双方公共数据为 23 # 获取模 p 的一个原根 generators = get_generator(p) # 获取 A 的私钥 XA = random.randint(0, p - 1) # 计算 A 的计算数 YA = get_calculation(p, generators[-1], XA) # 交换计算数 YB = int(Client(YA)) # 计算交换后 A 的密钥 key_A = get_key(XA, YB, p) print('客户端的生成密钥为:%d' % key_A) print('正在发送密钥至服务端比对...') judge_op = int(Client(key_A)) if judge_op == key_A: print('比对成功,密钥相同!')

Python Diffie-Hellman 密钥交换客户端代码实现 - 详细注释

原文地址: https://www.cveoy.top/t/topic/oDGc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录