Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import multiprocessing
- import random
- from Crypto.Cipher import PKCS1_OAEP
- from Crypto.PublicKey import RSA
- from base64 import b64encode
- import sys
- def get_rand_bytes(length):
- return "".join([chr(random.randrange(256)) for i in range(length)])
- cipherfiles = ['ciphertext-1.bin',
- 'ciphertext-2.bin',
- 'ciphertext-3.bin',
- 'ciphertext-4.bin',
- 'ciphertext-5.bin']
- def searchkey(keyfile, encryptedfile):
- print "processing %s - %s" % (keyfile, encryptedfile)
- sys.stdout.flush()
- public_key = RSA.importKey(open(keyfile).read()).publickey()
- pkcs1 = PKCS1_OAEP.new(public_key)
- with open(encryptedfile) as encfile:
- ciphertext = encfile.read()
- wanted_header = ciphertext[:512]
- found_key = None
- for seed in xrange(0, 2147483647):
- random.seed(seed)
- symmetric_key = get_rand_bytes(32)
- msg_header = pkcs1.encrypt(symmetric_key)
- if msg_header == wanted_header:
- print "Seed : %d, keyfile: %s" % (seed, keyfile)
- sys.stdout.flush()
- b64key = b64encode(symmetric_key)
- print "file ciphertext-%d.bin has symmetric key %s" % (encryptedfile, b64key)
- sys.stdout.flush()
- break
- print __name__
- if __name__ == "__main__":
- pool = multiprocessing.Pool()
- for k in xrange(1, 10):
- for f in cipherfiles:
- pool.apply_async(searchkey, args=("key-%d.pem" % k, f))
- pool.close()
- pool.join()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement