Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- #-*- coding: utf-8 -*-
- import gmpy2
- from gmpy2 import mpz
- bit_count = 64
- rand_state = gmpy2.random_state(42)
- def generate_prime(bits):
- temp = gmpy2.mpz_rrandomb(rand_state, bit_count)
- return gmpy2.next_prime(temp)
- # Настройка шифрования
- #
- p = generate_prime(bit_count)
- q = generate_prime(bit_count)
- assert(p != q)
- n = gmpy2.mul(p, q)
- phi = gmpy2.mul(p-1, q-1)
- print("p: %d" % p)
- print("q: %d" % q)
- print("n: %d" % n)
- print("phi: %d" % phi)
- # Генерация ключей
- #
- # Выберите 1 < e < phi такое что НОД(e, phi) = 1
- # e будет нашим открытым ключом
- #
- # Выберите d - мультипликативно обратное e в Z/phi
- # d будет нашим закрытым ключом
- #
- e = gmpy2.mpz_random(rand_state, phi)
- while (e <= 1 or gmpy2.gcd(e, phi) != 1):
- e = gmpy2.mpz_random(rand_state, phi)
- assert(e > 1)
- assert(gmpy2.gcd(e, phi) == 1)
- d = gmpy2.invert(e, phi)
- assert(d != 1)
- assert(gmpy2.t_mod(e*d, phi) == 1)
- print("PK(e): %d" % e)
- print("SK(d): %d" % d)
- # Шифрование и Дешифрование
- #
- m = mpz(123456789101112131415)
- c = gmpy2.powmod(m, e, n)
- m_rec = gmpy2.powmod(c, d, n)
- print("Original message: %d" % m)
- print("Ciphertext: %d" % c)
- print("Recovered message: %d" % m_rec)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement