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

前言

DH交换算法简介

Deffie-Hellman(简称 DH) 密钥交换是最早的密钥交换算法之一,它使得通信的双方能在非安全的信道中安全的交换密钥,用于加密后续的通信消息。 Whitfield Diffie 和 Martin Hellman 于 1976 提出该算法,之后被应用于安全领域,比如 Https 协议的 TLS(Transport Layer Security) 和 IPsec 协议的 IKE(Internet Key Exchange) 均以 DH 算法作为密钥交换算法。

Whitfield Diffie与Martin Hellman在1976年提出了一个奇妙的密钥交换协议,称为Diffie-Hellman密钥交换协议/算法(Diffie-Hellman Key Exchange/Agreement Algorithm)。这个机制的巧妙在于需要安全通信的双方可以用这个方法确定对称密钥。然后可以用这个密钥进行加密和解密。但是注意,这个密钥交换协议/算法只能用于密钥的交换,而不能进行消息的加密和解密。双方确定要用的密钥后,要使用其他对称密钥操作加密算法实现加密和解密消息。

DH算法

在这里插入图片描述
假如用户A和用户B希望交换一个密钥。
取素数p和整数a,a是p的一个原根,公开a和p。

A选择随机数XA<p,并计算YA=a^XA mod p。
B选择随机数XB<p,并计算YB=a^XB mod p。

每一方都将X保密而将Y公开让另一方得到。
A计算密钥的方式是:K=(YB) ^XA modp
B计算密钥的方式是:K=(YA) ^XB modp
关于算法的具体原理和证明可以参考下面的优秀博客
迪菲-赫尔曼密钥交换
DH密钥交换算法

Python算法的实现

这里关于DH算法的原理和实例将不在赘述,这里重点介绍一下python算法的实现,啊哈哈,主要是为了写作业的时候偷懒
代码使用的例题如下:
假设Alice和Bob打算利用DH算法交换一个密钥用于之后的通信,为次,他们首先选定一个质数p=13和一个原根g=7,假设你在他们通信过程中以及截获了Alice发送给Bob的公钥A=4和Bob发送给Alice的公钥B=9,求出Alice和Bob的私钥以及他们交换的公钥。
python实现:

#encoding=utf-8
#python3
#用于计算DH算法的python3脚本
#author:Monster
p=int(input("请输入公开的质数p:"))
g=int(input("请输入p的原根g:"))
KA=int(input("请输入A传给B的公钥KA:"))
KB=int(input("请输入B传给A的公钥KB:"))
for i in range(p):
	#print("try i="+str(i))
	if(pow(g,i)-KA)%p==0:
		XA=i
		#print("find XA="+str(i))
		break
for i in range(p):
	#print("try i="+str(i))
	if(pow(g,i)-KB)%p==0:
		XB=i
		#print("find XB="+str(i))
		break
K1=pow(KB,XA)%p
K2=pow(KA,XB)%p
if(K1==K2):
	print("A的私钥为:",XA)
	print("B的私钥为:",XB)
	print("A和B交换的密钥为:",K1)		

实现效果,将需要的信息输入程序:
在这里插入图片描述

后记

若还有其他疑问,欢迎留言评论

  • 3
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

monster663

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值