1.W.Diffie与M.Hellman在1976年提出一个称为Diffie-Hellman密钥交换的公钥密码算法。该算法能用来在两个用户之间安全地交换密钥材料,从而使双方得到一个共享的会话密钥,但该算法只能用于交换密钥,不能用于加/解密。

2.Diffie-Hellman密钥交换的安全性基于求解有限域上离散对数的困难性。首先,双方需要约定一个大素数p和它的一个本原根g,然后整个密钥交换的过程分两步完成:

3.Diffie-Hellman密钥交换算法的目的是使两个用户能安全交换密钥,以便在后续的通信中用该密钥对消息加密,算法的有效性建立在离散对数上,在计算离散对数是困难的才能确保秘密交换。其中在这次实验中了解到计算素数模的运算相对容易,计算离散对数却非常困难,而对大素数,求离散对数被认为是困难的,从而保证了Diffie-Hellman密钥交换的保密性。

4.代码实现

import math
import randomdef judge_prime(p):
#素数的判断if p <= 1:return Falsei = 2while i * i <= p:if p % i == 0:return Falsei += 1return Truedef get_generator(p):
#得到所有的原根a = 2list = []while a < p:flag = 1while flag != p:if (a ** flag) % p == 1:breakflag += 1if flag == (p - 1):list.append(a)a += 1return list#A,B得到各自的计算数
def get_calculation(p, a, X):Y = (a ** X) % preturn Y#A,B得到交换计算数后的密钥
def get_key(X, Y, p):key = (Y ** X) % preturn keyif __name__ == "__main__":#得到规定的素数flag = Falsewhile flag == False:print('Please input your number(It must be a prime!): ', end = '')p = input()p = int(p)flag = judge_prime(p)print(str(p) + ' is a prime! ')#得到素数的一个原根list = get_generator(p)print(str(p) + ' 的一个原根为:', end = '')print(list[-1])print('------------------------------------------------------------------------------')#得到A的私钥XA = random.randint(0, p-1)print('A随机生成的私钥为:%d' % XA)#得到B的私钥XB = 43print('B的私钥为:%d' % XB)print('------------------------------------------------------------------------------')#得待A的计算数YA = get_calculation(p, int(list[-1]), XA)print('A的计算数为:%d' % YA)#得到B的计算数YB = get_calculation(p, int(list[-1]), XB)print('B的计算数为:%d' % YB)print('------------------------------------------------------------------------------')#交换后A的密钥key_A = get_key(XA, YB, p)print('A的生成密钥为:%d' % key_A)#交换后B的密钥key_B = get_key(XB, YA, p)print('B的生成密钥为:%d' % key_B)print('---------------------------True or False------------------------------------')print(key_A == key_B)

实验结果

密码学--Diffie-Hellman密钥交换相关推荐

  1. Diffie Hellman密钥交换

    In short, the Diffie Hellman is a widely used technique for securely sending a symmetric encryption ...

  2. DH算法 | 迪菲-赫尔曼Diffie–Hellman 密钥交换及RSA(学习笔记)

    DH算法 | 迪菲-赫尔曼Diffie–Hellman 密钥交换(学习笔记),来自B站: [不懂数学没关系]DH算法 | 迪菲-赫尔曼Diffie–Hellman 密钥交换_哔哩哔哩_bilibili ...

  3. openssl-key-exchange 基于ECDH (Elliptic-Curve Diffie–Hellman) 的密钥交换流程

    openssl-key-exchange 本文摘自我在GitHub的开源项目 https://github.com/zhoupeng6d/openssl-key-exchange 简介 该方案介绍一种 ...

  4. 隐私计算加密技术基础系列-Diffie–Hellman key exchange

    1 密码学 1.1 背景 隐私计算(Privacy-preserving computation)是指在保证数据提供方不泄露原始数据的前提下,对数据进行分析计算的一系列信息技术,保障数据在流通与融合过 ...

  5. 密码学 专题 DH密钥交换算法

    注意事项: SSL中密钥交换算法有6种:无效(没有密钥交换).RSA.匿名Diffie-Hellman.暂时Diffie-Hellman.固定Diffie-Hellman.Fortezza 生成对话密 ...

  6. Elliptic curve Diffie–Hellman

    原文地址:https://en.wikipedia.org/wiki/Elliptic_curve_Diffie%E2%80%93Hellman Elliptic curve Diffie–Hellm ...

  7. Diffie–Hellman key exchange

    原文地址:https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange Diffie–Hellman key exchange F ...

  8. DH密钥交换算法的python实现——Diffie–Hellman key exchange

    文章目录 前言 DH交换算法简介 DH算法 Python算法的实现 后记 前言 DH交换算法简介 Deffie-Hellman(简称 DH) 密钥交换是最早的密钥交换算法之一,它使得通信的双方能在非安 ...

  9. 公钥密码/非对称密码:RSA、ElGamal、Diffie Hellman?LBC计算过程

    目录 一.公钥密码 1.1.公钥密码特点 1.2.公钥密码解决的问题 1.3.公钥密码与私钥密码的区别 二.公钥密码原理 2.1.单向函数 2.2.RSA计算过程 2.2.1.RSA生成密钥 2.2. ...

  10. 信息安全密码学实验四:Diffie-Hellman密钥交换协议的设计与实现

    一.实验目的 理解Diffie-Hellman算法的实现原理,编程实现Diffie-Hellman算法的程序,能够实现密钥协商的目的 二.实验原理 w.Diffie与M.Hellman在1976年提出 ...

最新文章

  1. 组队学习:学习者参考手册
  2. 华南理工大学院长涉嫌篡改8名研究生成绩,4人已停职
  3. 表格排序tablesort小案列
  4. git pull 报错:git - error: RPC failed; curl 18 transfer closed with outstanding read data remaining 解决
  5. windows符号服务器地址
  6. Java注释和真实世界的Spring示例
  7. CentOS7升级内核kernel5.0
  8. PyTorch出现RuntimeError: Function AddBackward0 returned an invalid gradient at index 1
  9. linux下的关机重启
  10. Mybatis源码编译
  11. 查看android内置(webview)浏览器和系统浏览器内核信息
  12. 大写日期转换器(大写日期转换器)
  13. 基础搜索(kuangbin专题)
  14. Linux-设备驱动概述
  15. CleanMyMac X最新2022如何激活许可证解决教程
  16. 基于Gromacs的蜘蛛毒素肽显性溶剂动力学分析
  17. SICP 练习1.8
  18. 厉害了,苹果应用内购买抽成半年狂赚49亿美元
  19. 活动回顾|Derek做客Staking Mondays
  20. 5个高质量简历模板网站,免费、免费、免费

热门文章

  1. 华为、百度这些大公司都青睐哪些编程语言呢?
  2. BIM+GIS技术融合发展 成为工程规划建设新热点
  3. 智慧水务综合管理平台解决方案,助力水司数字化管理
  4. 编程15年40岁程序员的我终于在压力下被迫转行了
  5. 通俗讲解:什么是Web
  6. (转载)OpenNI最新安装教程(图文教程)
  7. vue项目各个文件的作用
  8. Docker容器-------网络模式,数据卷和数据卷容器
  9. Java自然周的获取
  10. 【面试】大佬是如何面试别人List相关知识的