DH秘钥交换协议

DH秘钥交换协议

实现思路

参考:这里

具体步骤

  • 这个协议使用一个质数p的整数模n乘法群以及其原根g
  • Alice与Bob协定使用 p以及base g
  • Alice选择一个秘密整数a, 计算A = g**a mod p并发送给Bob。
  • Bob选择一个秘密整数b, 计算B = g**b mod p并发送给Alice。
  • Alice计算alice_key = B a mod p
  • Bob计算bob_key = A b mod p

下面贴出代码

import random
import math
from random import choice

def getRandomPrime(Nmax):
    isPrime = [0]*(Nmax+1)
    primeList = []
    isPrime[2] = 1
    for i in range(3,Nmax,2):
        isPrime[i] = 1
    for i in range(3,int(math.sqrt((Nmax+1)))+1,2):
        if(isPrime[i] == 1):
            for j in range(i*i,Nmax+1,2*i):
                isPrime[j] = 0
    for i in range(2,Nmax+1):
        if (isPrime[i]==1):
            primeList.append(i)
    p , q  = random.sample(primeList,2)
    return p

#根据原根的性质求质数de原根
def getPrimaryRoot(p):
    a = 2
    while True:
        mark = 0
        if a ** (p - 1) % p == 1:
            num = 2
            while num < p - 1:
                if a ** num % p == 1:
                    mark = 1
                num += 1
            if mark == 0:
                return a
        a += 1

def getA_B(g,a,p):
    return (g ** a) % p

def getKey(A_B,a_b,p):
    return (A_B**a_b) % p

if __name__ == "__main__":
    p = getRandomPrime(200)
    g = getPrimaryRoot(p)
    rand_a = random.randint(0, p - 1)
    A = getA_B(g, rand_a, p)
    rand_b = random.randint(0, p - 1)
    B = getA_B(g, rand_b, p)
    alice_key = getKey(B,rand_a,p)
    bob_key = getKey(A,rand_b,p)

    print("step1: ","a:",rand_a," ","g:",g," ","p:",p)
    print("step2: ", "A:", A)
    print("step3: ", "B:", B)
    print("step4: ", "Alice_key:", alice_key)
    print("step5: ", "Bob_key:", bob_key)

下面贴出运行截图

运行截图
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、SSL协商 由于非对称加密的速度比较慢,所以它一般用于密钥交换,双方通过公钥算法协商出一份密钥,然后通过对称加...
    自我陶醉阅读 2,666评论 1 1
  • 终端之间信息传递安全性的保证始终是业务的刚性需求。不同的加密算法针对不同的业务需求,因为公司是金融公司性质,又不是...
    语歌阅读 2,840评论 0 5
  • 姓名:于川皓 学号:16140210089 转载自:https://baike.baidu.com/item/RS...
    道无涯_cc76阅读 2,633评论 0 1
  • 第一章,开学,初遇 “叮铃铃!” 新的一学期又开始了,大二的学长学姐们正在校门口迎接大一新生,其中最醒目的还是薄菲...
    糖糖贝贝吧阅读 527评论 0 0
  • 九月九日 经文: 「我就应允你,並将你所不知道,又大又难的事指示你。」(耶利米书卅三:3) 这节圣经有好多译...
    凯西女士阅读 553评论 0 0