Advertisement
foryou97

Untitled

May 14th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.95 KB | None | 0 0
  1. from numbthy import *
  2. import random
  3.  
  4. size = 8
  5. pad = 32
  6.  
  7. def Encode(p, q, plain):
  8.     cipher = ""
  9.     N = p * q
  10.     phi = (p-1)*(q-1)
  11.     # for e in reversed(xrange(2, phi)):
  12.     #   if gcd(e, phi) == 1:
  13.     #       break  
  14.     while True:
  15.         e = random.randint(2, phi)
  16.         if gcd(e, phi) == 1:
  17.             break
  18.         pass
  19.     print "e : " + str(e)
  20.     for i in range(0, len(plain), size):
  21.         M = int(plain[i:i+size], 2)
  22.         cipher += bin(pow(M, e, N))[2:].rjust(pad , "0")
  23.     return cipher, e
  24.  
  25. def Decode(cipher, p , q, e):  
  26.     N = p * q
  27.     phi = (p - 1) * (q - 1)
  28.     d = invmod(e, phi)
  29.     plain = ""
  30.     for i in range(0, len(cipher), pad):
  31.         C = int(cipher[i:i+pad], 2)
  32.         plain += hex(pow(C, d, N))[2:].decode("hex")
  33.     return plain
  34.  
  35.  
  36. file = "plain.txt"
  37. f = open(file, 'rb').read()
  38. plain = ''.join(format(ord(x), 'b').rjust(8, "0") for x in f)
  39.  
  40. p = 859
  41. q = 997
  42.  
  43. cipher, e  = Encode(p, q, plain)
  44. print "cipher : " + cipher
  45.  
  46. plaintext = Decode(cipher, p, q, e)
  47. print "plaintext : " + plaintext
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement