Advertisement
Guest User

Untitled

a guest
Feb 25th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.52 KB | None | 0 0
  1. import multiprocessing
  2. import random
  3. from Crypto.Cipher import PKCS1_OAEP
  4. from Crypto.PublicKey import RSA
  5. from base64 import b64encode
  6. import sys
  7.  
  8.  
  9. def get_rand_bytes(length):
  10. return "".join([chr(random.randrange(256)) for i in range(length)])
  11.  
  12. cipherfiles = ['ciphertext-1.bin',
  13. 'ciphertext-2.bin',
  14. 'ciphertext-3.bin',
  15. 'ciphertext-4.bin',
  16. 'ciphertext-5.bin']
  17.  
  18.  
  19. def searchkey(keyfile, encryptedfile):
  20. print "processing %s - %s" % (keyfile, encryptedfile)
  21. sys.stdout.flush()
  22.  
  23. public_key = RSA.importKey(open(keyfile).read()).publickey()
  24. pkcs1 = PKCS1_OAEP.new(public_key)
  25.  
  26. with open(encryptedfile) as encfile:
  27. ciphertext = encfile.read()
  28. wanted_header = ciphertext[:512]
  29.  
  30. found_key = None
  31. for seed in xrange(0, 2147483647):
  32. random.seed(seed)
  33. symmetric_key = get_rand_bytes(32)
  34. msg_header = pkcs1.encrypt(symmetric_key)
  35. if msg_header == wanted_header:
  36. print "Seed : %d, keyfile: %s" % (seed, keyfile)
  37. sys.stdout.flush()
  38. b64key = b64encode(symmetric_key)
  39. print "file ciphertext-%d.bin has symmetric key %s" % (encryptedfile, b64key)
  40. sys.stdout.flush()
  41. break
  42.  
  43. print __name__
  44. if __name__ == "__main__":
  45. pool = multiprocessing.Pool()
  46. for k in xrange(1, 10):
  47. for f in cipherfiles:
  48. pool.apply_async(searchkey, args=("key-%d.pem" % k, f))
  49. pool.close()
  50. pool.join()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement