Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #4
0
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
Beispiel #5
0
def get():
    print(get_large_prime_length(150))
    print(get_large_prime_bit_size(526))