Advertisement
mgostih

RSA key generator + E/D

Jul 13th, 2015
430
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.24 KB | None | 0 0
  1. import omr
  2. import random
  3. def egcd(a, b):
  4.     if a == 0:
  5.         return (b, 0, 1)
  6.     else:
  7.         g, y, x = egcd(b % a, a)
  8.         return (g, x - (b // a) * y, y)
  9.  
  10. def modinv(a, m):
  11.     g, x, y = egcd(a, m)
  12.     if g != 1:
  13.         raise Exception('modular inverse does not exist')
  14.     else:
  15.         return x % m
  16. def genKey():
  17.     primes=[]
  18.     while len(primes)<2:
  19.         a = random.randrange(10**255,10**256)
  20.         x = omr.mrt(a,3)
  21.         if x:
  22.             betterx = omr.mrt(x,128)
  23.             if betterx:
  24.                 primes.append(x)
  25.     p,q = primes[0],primes[1]
  26.     n = p*q
  27.     phi = (p-1)*(q-1)
  28.     e = (2**16)+1
  29.     try:
  30.         d = modinv(e,phi)
  31.     except:
  32.         print("Theze numbers aren't dank, m8")
  33.     return([hex(e),hex(n)],[hex(d),hex(n)])
  34. def encrypt(message,k):
  35.     numericalmessage="0x"
  36.     if len(message) >(len(k[1])-3)/2:
  37.         print("Message too large")
  38.         input()
  39.         exit()
  40.     for i in message:
  41.         numericalmessage += hex(ord(i)).split("0x")[1]
  42.     return hex(pow(int(numericalmessage,16),int(k[0],16),int(k[1],16)))
  43. def decrypt(crypted,k):
  44.     message = ""
  45.     crypted = hex(pow(int(crypted,16),int(k[0],16),int(k[1],16)))
  46.     crypted = crypted [2:]
  47.     while crypted:
  48.         message += chr(int(crypted[:2],16))
  49.         crypted = crypted[2:]
  50.     return message
  51. def startup():
  52.     x = input("Encrypt or Decrypt? [E/D] ")
  53.     if x.lower() == "e":
  54.         m = input("Write message to encrypt: ")
  55.         e = input("Write public Key: (Example: ['number1', 'number2'] ")
  56.         e = e[1:]
  57.         e = e[0:len(e)-1]
  58.         e = e.split(",")
  59.         e[0] = e[0][1:]
  60.         e[0] = e[0][0:len(e[0])-1]
  61.         e[1] = e[1][2:]
  62.         e[1] = e[1][0:len(e[1])-1]
  63.         return encrypt(m,e)
  64.     elif x.lower() == "d":
  65.         m = input("Write message to decrypt: ")
  66.         e = input("Write private Key: (Example: ['number1', 'number2'] ")
  67.         e = e[1:]
  68.         e = e[0:len(e)-1]
  69.         e = e.split(",")
  70.         e[0] = e[0][1:]
  71.         e[0] = e[0][0:len(e[0])-1]
  72.         e[1] = e[1][2:]
  73.         e[1] = e[1][0:len(e[1])-1]
  74.         return decrypt(m,e)
  75.     else:
  76.         startup()
  77. def gk():
  78.     a,b = genKey()
  79.     print("Public key:     ",a,"\n\n\n\n\n","Private key:  ",b)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement