rockmanvnx6

Cipher_shift.py

Aug 14th, 2018
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.85 KB | None | 0 0
  1. import math
  2.  
  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.  
  17. def keyIn(console):
  18.     console = input("Type command here. Type /help to see available commands: ")
  19.     return console
  20.  
  21. def is_prime(n):
  22.     """"pre-condition: n is a nonnegative integer
  23.    post-condition: return True if n is prime and False otherwise."""
  24.     if n < 2:
  25.          return False;
  26.     if n % 2 == 0:
  27.          return n == 2  # return False
  28.     k = 3
  29.     while k*k <= n:
  30.          if n % k == 0:
  31.              return False
  32.          k += 2
  33.     return True
  34. store = []
  35. def primeFactorize(n):
  36.     for i in range(2,99):
  37.         if(is_prime(i)):
  38.             store.append(i)
  39.     for i in store:
  40.         for a in store:
  41.             if(a != i):
  42.                 if (a*i == n):
  43.                     return a,i;
  44.  
  45.  
  46. def gcd(a, b):
  47.     """Compute the greatest common divisor of a and b"""
  48.     while b > 0:
  49.         a, b = b, a % b
  50.     return a
  51.  
  52.  
  53. def lcm(a, b):
  54.     """Compute the lowest common multiple of a and b"""
  55.     return a * b / gcd(a, b)
  56.  
  57. def L(u,n):
  58.     return (u-1)/n
  59. console = None
  60. console = keyIn(console)
  61. while(True):
  62.     if(console == "/help"):
  63.         print("")
  64.         print("Available mode: ")
  65.         print("[+] /rsa to start rsa mode")
  66.         print("[+] /b-rsa to start cracking mode")
  67.         print("[+] /elgamal to start elgamal mode")
  68.         print("[+] /paillier to start paillier mode")
  69.         print("")
  70.  
  71.         console = keyIn(console)
  72.  
  73.     elif(console == "/rsa"):
  74.         print("----- RSA -----");
  75.         p = input("Enter p: ")
  76.         q = input("Enter q: ")
  77.         e = input("Enter e (leave blank to choose the smallest) : ")
  78.         M = input("Enter message (leave blank if none): ")
  79.         p = int(p)
  80.         q = int(q)
  81.         n = p*q
  82.         fin = (p-1)*(q-1)
  83.         if(e == ""):
  84.             for i in range(1,999):
  85.                 if(i > 1 and math.gcd(i,fin) == 1):
  86.                     e = i;
  87.                     break;
  88.         else:
  89.             e = int(e)
  90.         if(M != ""):
  91.             M = int(M)
  92.             C = (M**e)%n
  93.             d = modinv(e,fin)
  94.         else:
  95.             C = None
  96.             d = "No Message, not Available"
  97.         print("")
  98.         print("Result:")
  99.         print("[+] n = " + str(n))
  100.         print("[+] e = " + str(e))
  101.         print("[+] fin = " + str(fin))
  102.         print("public-key: (" + str(n) + "," + str(e) + ")")
  103.         print("private-key: d = " + str(d))
  104.         print("Encrypted Message: " + str(C));
  105.         print()
  106.         print("---- TEST CORRECTNESS ----")
  107.         print()
  108.         test = (C**d)%n
  109.         print("Taking private key (" + str(d) + ") decrypting (" + str(C) + ")")
  110.         print("Decrypted Message: " + str(test));
  111.         if(test == M):
  112.             print("Test positive, calculation is correct !")
  113.         else:
  114.             print("Test negative, please use tool online")
  115.         print("")
  116.         console = keyIn(console)
  117.  
  118.     elif(console == "/b-rsa"):
  119.         print("----- BREAKING RSA -----");
  120.         n = input("Enter n: ")
  121.         n = int(n)
  122.         e = input("Enter e: ")
  123.         e = int(e)
  124.         C = input("Enter C: ")
  125.         C = int(C)
  126.         p,q = primeFactorize(n);
  127.         fin = (p-1) * (q-1)
  128.         d = modinv(e,fin)
  129.         M = (C**d) % n
  130.         print()
  131.         print("Result:")
  132.         print("[+] p = " + str(p))
  133.         print("[+] q = " + str(q))
  134.         print("[+] fin = " + str(fin))
  135.         print("Private key d = " + str(d))
  136.         print("Decrypted Message: " + str(M))
  137.         console = keyIn(console)
  138.     elif(console == "/elgamal"):
  139.         print("----- ELGAMAL ENCRYPTION -----")
  140.         p = input("enter p: ")
  141.         p = int(p)
  142.         g = input("enter g: ")
  143.         g = int(g)
  144.         x = input("enter x: ")
  145.         x = int(x)
  146.         r = input("enter r: ")
  147.         r = int(r)
  148.         m = input("enter m: ")
  149.         m = int(m)
  150.  
  151.         y = (g**x)%p
  152.         k = (y**r)%p
  153.         C1 = (g**r)%p
  154.         C2 = m*k%p
  155.         mod_inv_k = modinv(k,p)
  156.  
  157.         print("--- Calculation ---")
  158.         print("")
  159.         print("Initial: ")
  160.         print(" - p:" + str(p))
  161.         print(" - g:" + str(g))
  162.         print(" - x:" + str(x))
  163.         print(" - r:" + str(r))
  164.         print(" - m:" + str(m))
  165.         print("")
  166.         print("Key generation: ")
  167.         print("[+] y: " + str(y))
  168.         print("")
  169.         print("Sender side Encryption")
  170.         print("[+] k: " + str(k))
  171.         print("[+] C1: " + str(C1))
  172.         print("[+] C2: " + str(C2))
  173.         print("")
  174.         print("Receiver side decryption")
  175.         print("[+] k: " + str((C1**x)%p))
  176.         print("[+] mod_inv k: " + str(mod_inv_k))
  177.         test = mod_inv_k * C2 % p
  178.         print("[+] message: " + str(test))
  179.         if(int(test) == m):
  180.             print("---SUCCESSFULLY---")
  181.         else:
  182.             print("Failed !")
  183.         console = keyIn(console)
  184.  
  185.  
  186.     elif (console == "/paillier"):
  187.         print("----- PAILLIER ENCRYPTION -----")
  188.         p = input("enter p: ")
  189.         p = int(p)
  190.         q = input("enter q: ")
  191.         q = int(q)
  192.         g = input("enter g: ")
  193.         g = int(g)
  194.         r = input("enter r: ")
  195.         r = int(r)
  196.         m = input("enter m: ")
  197.         m = int(m)
  198.  
  199.         n = p*q;
  200.         halflife = int(lcm(p-1,q-1))
  201.         target = (g**halflife)%(n**2)
  202.         k = int(L(target,n))
  203.         u = int(modinv(k,n))
  204.  
  205.         print("--- Calculation ---")
  206.         print("")
  207.         print("Initial: ")
  208.         print(" - p:" + str(p))
  209.         print(" - q:" + str(q))
  210.         print(" - g:" + str(g))
  211.         print(" - r:" + str(r))
  212.         print(" - m:" + str(m))
  213.         print("")
  214.         print("Public key generation by receiver: ")
  215.         print("[+] n: " + str(n))
  216.         print("[+] Public key (n,g): ("+str(n) + "," + str(g)+")")
  217.  
  218.         print("")
  219.         print("Private key generation by Receiver")
  220.  
  221.         print("[+] lambda: " + str(halflife))
  222.         print("[+] k: " + str(k))
  223.         print("[+] u: " + str(u))
  224.         print("[+] Receiver saves private key: (" + str(halflife) + "," + str(u) +")")
  225.  
  226.  
  227.         print("")
  228.         print("Sender side encryption")
  229.         c = (g**m)*(r**n)%(n**2)
  230.         print("[+] with r = " + str(r) + "; we have c = " +str(c))
  231.  
  232.         print("")
  233.         print("Receiver decryption")
  234.         test_c = (c**halflife)%(n**2)
  235.         test = int(L(test_c,n) * u % n)
  236.         print("[+] message: " + str(test))
  237.         if (int(test) == m):
  238.             print("---SUCCESSFULLY---")
  239.         else:
  240.             print("Failed !")
  241.         console = keyIn(console)
  242.  
  243.  
  244.  
  245.     else:
  246.         print("Invalid argument!")
  247.         console = keyIn(console)
Add Comment
Please, Sign In to add comment