DH算法中求大素数的原根python实现
时间: 2023-07-26 16:43:21 浏览: 218
在DH算法中,要求选取一个大素数以及一个原根,以作为密钥交换的参数。下面是Python实现DH算法中求大素数的原根的示例代码:
```python
import random
# 判断是否为素数
def is_prime(n):
if n <= 3:
return n > 1
elif n % 2 == 0 or n % 3 == 0:
return False
i = 5
while i * i <= n:
if n % i == 0 or n % (i + 2) == 0:
return False
i += 6
return True
# 求一个数的所有因子
def factors(n):
return set(x for tup in ([i, n//i] for i in range(1, int(n**0.5)+1) if n % i == 0) for x in tup)
# 求一个大素数
def get_large_prime():
while True:
p = random.randint(1000, 9999)
if is_prime(p):
return p
# 求大素数的原根
def get_primitive_root(p):
factors_set = factors(p-1)
primitive_roots = []
for g in range(2, p):
flag = True
for factor in factors_set:
if pow(g, (p-1)//factor, p) == 1:
flag = False
break
if flag:
primitive_roots.append(g)
return primitive_roots[0]
# 测试
p = get_large_prime()
g = get_primitive_root(p)
print("大素数p为:", p)
print("p的原根g为:", g)
```
以上是一个简单的DH算法中求大素数的原根的实现,通过这段代码可以更好的理解如何选取DH算法中的参数。
阅读全文