美文网首页
DH秘钥交换协议

DH秘钥交换协议

作者: AnswerHua | 来源:发表于2018-04-22 23:33 被阅读0次

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)

下面贴出运行截图

运行截图

相关文章

  • 密码学之DH秘钥交换协议

    密码学之DH秘钥交换协议 DH秘钥交换协议简介 普遍大家都认为公钥[https://baike.baidu.com...

  • DH秘钥交换协议

    DH秘钥交换协议 实现思路 参考:这里 具体步骤 这个协议使用一个质数p的整数模n乘法群以及其原根g Alice与...

  • ReactNative DH秘钥交换测试

    ReactNative使用DH秘钥交换,JS端使用了bignumber库,结果iPhone5s移动端计算时间达到了...

  • Android-DH 秘钥交换

    Android-RSA 分段加密解密Android-Openssl创建RSA公钥和私钥Android-AES加解密...

  • Diffie-Hellman秘钥交换

    什么是秘钥交换 秘钥交换也叫秘钥协商,在进行对称加密的时候,怎么进行安全的传送秘钥呢?需要使用秘钥交换。 Diff...

  • dh秘钥交换算法实践

    一、场景 出于对于服务器与客户端数据传输安全的需要,将整个请求的入参出参按照约定方式加密,这里选用 AES ,入选...

  • JAVA实现非对称加密

    高级加密算法 双保险 公钥、私钥 DH(Diffie-Hellman)密钥交换算法 RSA - 基于因子分解 El...

  • HTTPS 中 SSL/TLS 协议基本流程------

    SSL/TLS协议基本流程: 客户端向服务器索要并验证服务器的公钥。 双⽅协商⽣产「会话秘钥」。 双⽅采⽤「会话秘...

  • 非对称加密算法

    高级 双保险 公钥,私钥 DH 密钥交换算法(是非对称加密的起源) RSA 基于因子分解(应用范围最广,既能用于数...

  • ssl协商与秘钥交换

    一、SSL协商 由于非对称加密的速度比较慢,所以它一般用于密钥交换,双方通过公钥算法协商出一份密钥,然后通过对称加...

网友评论

      本文标题:DH秘钥交换协议

      本文链接:https://www.haomeiwen.com/subject/spihlftx.html