SHARE
TWEET

Untitled

a guest Aug 25th, 2019 61 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import collections
  2. from Crypto.PublicKey import RSA
  3. from Crypto.Util import number
  4. from math import gcd
  5.  
  6. class Data:
  7.   def __init__(self, idx):
  8.     self.idx = idx
  9.     self.public_key = None
  10.     self.private_key = None
  11.     self.ciphertext = None
  12.     self.plaintext = None
  13.  
  14. def get_data(idx):
  15.   data = Data(idx)
  16.   with open('{}.pem'.format(idx), 'rb') as pem:
  17.     data.public_key = RSA.importKey(pem.read())
  18.   with open('{}.bin'.format(idx), 'rb') as bin:
  19.     data.ciphertext = bin.read()
  20.   return data
  21.  
  22. datas = [get_data(idx) for idx in range(1, 101)]
  23.  
  24. def make_private_key(p, q, e=65537):
  25.   n = p * q
  26.   phi = (p - 1) * (q - 1)
  27.   d = number.inverse(e, phi)
  28.   return RSA.construct((n, e, d))
  29.  
  30. primes = {}
  31. for data1 in datas:
  32.   for data2 in datas:
  33.     if data1 == data2: continue
  34.  
  35.     div = gcd(data1.public_key.n, data2.public_key.n)
  36.     if div == 1: continue
  37.  
  38.     p1 = data1.public_key.n // div
  39.     p2 = data2.public_key.n // div
  40.  
  41.     if data1.private_key is None:
  42.       data1.private_key = make_private_key(div, p1)
  43.     if data2.private_key is None:
  44.       data2.private_key = make_private_key(div, p2)
  45.  
  46. for data in datas:
  47.   if data.private_key is not None:
  48.     # data.ciphertext = data.public_key.encrypt(b'hello world', 0)
  49.     data.plaintext = data.private_key.decrypt(data.ciphertext)
  50.  
  51.     with open('out/{}.pem'.format(data.idx), 'wb') as out:
  52.       out.write(data.private_key.exportKey(format='PEM'))
  53.     with open('out/{}.dec'.format(data.idx), 'wb') as out:
  54.       print('{}.dec: {}'.format(data.idx, data.plaintext))
  55.       out.write(data.plaintext)
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top