def primeFactorization(length): #分解质因数 global p, q q = get_large_prime_length(length) while True: d = random.randint(2, 10000) if d % 2 == 0: p = q * d + 1 if is_prime(p) == True: break else: continue else: continue primeList = prime_range(2, int(math.sqrt(d))) result = [[0, 0] for i in range(len(primeList))] for i in range(len(primeList)): result[i][0] = primeList[i] while d % primeList[i] == 0: result[i][1] += 1 d = d // primeList[i] if d != 1: result.append([d, 1]) result.append([q, 1]) # 请问这个result列表的作用是什么? return result
def key_gen(n): #生成大素数 for _ in range(4): p = get_large_prime_length(n) q = get_large_prime_length(n) while (p == q): q = get_large_prime_length(n) print(p) print(q) n = p * q n1 = (p - 1) * (q - 1) #默认为65537 e = 65537 r, d, l = t.ext_gcd(e, n1) if d < 0: d = d + n1 return p, q, n, e, d
def get_key(n=20): """ 获取公钥 p, g , (g^x)mod p 和私钥 x :param n: the long of random prime :return: p,g,y,x """ import pyunit_prime p = pyunit_prime.get_large_prime_length(n) # p = 49924286347363285385002602166419178756593347008815637398138749880304666805251999 yn = p - 1 f = 2 x_list = [] while yn != 1: print('yn:', yn) print('f:', f) print(pyunit_prime.is_prime(int(yn))) if pyunit_prime.is_prime(int(yn)): x_list.append(int(yn)) break if pyunit_prime.is_prime(f): if yn % f == 0: x_list.append(f) while yn % f == 0: yn = yn // f if yn == 1: break f += 1 else: f += 1 yn = p - 1 print('yn:', yn) print('x list:', x_list) error_list = [] import random while True: i = random.randint(2, p) if i in error_list: continue else: error_list.append(i) k = 0 for j in x_list: if fastExpMod(i, int(yn // j), p) == 1: break else: k += 1 if k == len(x_list): import random x = random.randint(1, p - 1) return p, i, fastExpMod(i, x, p), x
def primeFactorization(k): #分解质因数 while True: q = get_large_prime_length(length) p = (q * k + 1) if (k % 2 == 0) else (q * (k + 1) + 1) if is_prime(p) == True: break else: continue primeList = prime_range(2, int(math.sqrt(k))) result = [[0, 0] for i in range(len(primeList))] for i in range(len(primeList)): result[i][0] = primeList[i] while k % primeList[i] == 0: result[i][1] += 1 k = k // primeList[i] if k != 1: result.append([k, 1]) result.append([q, 1]) return result, p, q
def get(): print(get_large_prime_length(150)) print(get_large_prime_bit_size(526))