首页 > 编程语言 >DH算法python 原理说明和演示

DH算法python 原理说明和演示

时间:2024-06-12 18:11:13浏览次数:26  
标签:__ 演示 DH python pow 秘钥 step print mod

import gmpy2

p = 17
g = 3

x_a = 15
x_b = 13

# y_a = a_g ^ x_a mod a_p
y_a = 6
# y_a = a_g ^ b_x mod a_p
y_b = 12

# a
# y_s = y_b ^ x_a mod a_p
# y_s = 12 ^ 15 mod 17

# b
# y_s = ya ^ x_b mod a_p
# y_s = 6 ^ 12 mod 17

if __name__ == '__main__':
    # step 0
    print(f'step 0 通讯双方 A、B')

    # step 1
    print(f'step 1 A 发起通讯')
    a_p = 17
    a_g = 3
    print(f'    首先公开质数(越大越好)P :{p}')
    print(f'    随机选取原根G (验证是否g真的是模p的原根,a必须和p互素例如 g^x ≡ a (mod p) =>g:{g}')
    print(f'    公开(p,g) => ({p},{g})')

    # step 2
    print(f'step 2 B 收到公开(p,g) 随机一个数字')
    x_a = 15
    x_b = 13
    print(f'    B 随机数 x_b 私密保存 :{x_b}')
    print(f'    A 随机数 x_a 私密保存 :{x_a}')
    print(f'    A、B 随机数 (x_a,x_b) 私密保存 :({x_a},{x_b})')

    # step 3
    y_a = pow(g, x_a, p)
    y_b = pow(g, x_b, p)
    print(f'step 3 A、B交换欧拉函数 g ^ x mod p')
    print(f'    B 交换值 g ^ x_b mod p  =>  {g} ^ {x_b} mod {p} => {y_b}')
    print(f'    A 交换值 g ^ x_a mod p  =>   {g} ^ {x_b} mod {p} => {y_a}')
    print(f'    A、B 交换值 (y_a,y_b) 公开交换 :({y_a},{y_b})')
    print(f'    A 得到 y_b  :{y_b}')
    print(f'    B 得到 y_a  :{y_a}')
    print(f'    整协商过程完成')

    # step 4-a
    s_a = pow(y_b, x_a, p)
    print(f'step 4-a  A 得到秘钥')
    print(f'    A 公开参数有 (p,g y_a ,y_b) => ({p},{g} ,{y_a} ,{y_b})')
    print(f'    A 保密参数有 (x_a ) => ({x_a} )')
    print(f'    A 秘钥基于公开参数 y_b ^ x_a mod p  =>  {y_b} ^ {x_a} mod {p} => {s_a}')

    # step 4-b
    s_b = pow(y_a, x_b, p)
    print(f'step 4-a  B 得到秘钥')
    print(f'    B 公开参数有 (p,g y_a ,y_a) => ({p},{g} ,{y_a} ,{y_a})')
    print(f'    B 保密参数有 (x_b ) => ({x_b} )')
    print(f'    B 秘钥基于公开参数 y_a ^ x_b mod p  =>  {y_a} ^ {x_b} mod {p} => {s_a}')

    print(f'\nps: 都得到了相同的秘钥(s_a,s_b) => ({s_a},{s_b})')
    print(f'    A,B 只要不泄露随机数x ,都无法被破解,欧拉定理,模运算与指数运算之间的关系 ')

标签:__,演示,DH,python,pow,秘钥,step,print,mod
From: https://www.cnblogs.com/guanchaoguo/p/18244472

相关文章

  • python-爬虫-邮箱发送
    #-*-coding:utf-8-*-#发送信息到邮箱importemail.utilsimportsmtplibfromemail.mime.textimportMIMEText#发送文本fromemail.mime.imageimportMIMEImage#发送图片fromemail.mime.multipartimportMIMEMultipartfromemail.headerimportHeader""&quo......
  • python-爬虫-获取浏览器的cookies
    1、封装浏览器对象#-*-coding:utf-8-*-"""封装类将获取浏览器的对象封装成一个类调用方法:1、importGet_Browser2、driver=Get_Browser.Get_Browsers().get_browser()"""fromseleniumimportwebdriverclassGet_Browsers:def__init__(self......
  • 朴素贝叶斯分类器 #数据挖掘 #Python
    朴素贝叶斯分类器是一种基于概率统计的简单但强大的机器学习算法。它假设特征之间是相互独立的(“朴素”),尽管在现实世界中这通常不成立,但在许多情况下这种简化假设仍能提供良好的性能。基本原理:朴素贝叶斯分类器利用贝叶斯定理,计算给定输入特征条件下属于某个类别的概率,并选择......
  • python系列:python fastapi + uvicorn 记录日志的最佳实践,结合nb_log
    pythonfastapi+uvicorn记录日志的最佳实践,结合nb_logpythonfastapi+uvicorn记录日志的最佳实践,结合nb_logpythonfastapi+uvicorn记录日志的最佳实践,结合nb_logpythonfastapi+uvicorn记录日志的最佳实践,要记录对fastapi什么时候请求了什么url和入......
  • Python中用PyTorch机器学习神经网络分类预测银行客户流失模型|附代码数据
    阅读全文:http://tecdat.cn/?p=8522最近我们被客户要求撰写关于神经网络的研究报告,包括一些图形和统计输出。分类问题属于机器学习问题的类别,其中给定一组特征,任务是预测离散值。分类问题的一些常见示例是,预测肿瘤是否为癌症,或者学生是否可能通过考试在本文中,鉴于银行客户的某些......
  • python中实例方法、类方法、静态方法
    实例方法self:代表类的实例类方法cls:代表类这个名称本身静态方法不能传递类的实例self,也不能传递类本身cls点击查看代码classMyClass:"""静态成员变量静态成员变量是被类的所有实例共享的访问方式:通过类名."""my_static_variable=0"......
  • python-爬虫-解决反爬机制-登录淘宝
    #-*-coding:utf-8-*-"""1、先手动登录获取cookie2、获取cookie保存在taobaoCookies.pickle文件中3、使用cookie去请求网页"""importosimportpickleimporttimefromseleniumimportwebdriverfromselenium.webdriver.support.waitimportWebDriverWa......
  • python-爬虫-playwright模块反爬
    fromplaywright.sync_apiimportPlaywright,sync_playwright,expectdefrun(playwright:Playwright)->None:#指定浏览器启动的端口#打开cmd:chrome--remote-debugging-port=9412--user-data-dir="F:\\google"#--remote-debugging-port=指定的端口......
  • 在Python中使用LSTM和PyTorch进行时间序列预测|附代码数据
    全文链接:http://tecdat.cn/?p=8145最近我们被客户要求撰写关于LSTM的研究报告,包括一些图形和统计输出。顾名思义,时间序列数据是一种随时间变化的数据类型。例如,24小时内的温度,一个月内各种产品的价格,一年中特定公司的股票价格诸如长期短期记忆网络(LSTM)之类的高级深度学习模型能......
  • PYTHON学习过程中的一些有用tips.
    开头语大家好,我是小安同学,我是大一开始学习python,面对这一门陌生的语言中间有许多的弯路,希望可以对大家的学习有所帮助。目前Python可以说是非常流行,在目前的编程语言中,Python的抽象程度是最高的,是最接近自然语言的,很容易上手。你可以用它来完成很多任务,比如数据科学、机器学......