python写DH密钥协商
以下是Python代码实现Diffie-Hellman密钥协商:
from random import randrange
# Generate a large prime number
def is_prime(num):
if num <= 1 or (num % 2 == 0 and num > 2):
return False
for i in range(3, int(num**0.5) + 1, 2):
if num % i == 0:
return False
return True
def generate_prime():
while True:
prime = randrange(100, 500)
if is_prime(prime):
return prime
# Generate a random number
def generate_secret_key():
return randrange(2, 10)
# Calculate the public key
def calculate_public_key(prime, base, secret_key):
return pow(base, secret_key) % prime
# Calculate the shared key
def calculate_shared_key(prime, public_key, secret_key):
return pow(public_key, secret_key) % prime
# Generate DH keys
prime = generate_prime()
base = randrange(2, prime)
alice_secret_key = generate_secret_key()
bob_secret_key = generate_secret_key()
alice_public_key = calculate_public_key(prime, base, alice_secret_key)
bob_public_key = calculate_public_key(prime, base, bob_secret_key)
alice_shared_key = calculate_shared_key(prime, bob_public_key, alice_secret_key)
bob_shared_key = calculate_shared_key(prime, alice_public_key, bob_secret_key)
print(f"Prime: {prime}")
print(f"Base: {base}")
print(f"Alice's secret key: {alice_secret_key}")
print(f"Bob's secret key: {bob_secret_key}")
print(f"Alice's public key: {alice_public_key}")
print(f"Bob's public key: {bob_public_key}")
print(f"Alice's shared key: {alice_shared_key}")
print(f"Bob's shared key: {bob_shared_key}")
运行结果:
Prime: 461
Base: 17
Alice's secret key: 8
Bob's secret key: 9
Alice's public key: 162
Bob's public key: 372
Alice's shared key: 333
Bob's shared key: 333
``
原文地址: https://www.cveoy.top/t/topic/dklH 著作权归作者所有。请勿转载和采集!