Advertisement
SooO

Untitled

Nov 19th, 2018
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.72 KB | None | 0 0
  1. from Crypto.Util import number
  2. import random
  3. from fractions import gcd
  4. import time
  5. import matplotlib.pyplot as plt
  6.  
  7. # Key Length Choice 64, 128, 256, 512
  8. n_length = 64
  9.  
  10.  
  11. def egcd(a, b):
  12.     if a == 0:
  13.         return (b, 0, 1)
  14.     else:
  15.         g, y, x = egcd(b % a, a)
  16.         return (g, x - (b // a) * y, y)
  17.  
  18.  
  19. def modinv(a, m):
  20.     g, x, y = egcd(a, m)
  21.     if g != 1:
  22.         raise Exception('modular inverse does not exist')
  23.     else:
  24.         return x % m
  25.  
  26.  
  27. def get_keys():
  28.     p = number.getPrime(n_length)
  29.     q = number.getPrime(n_length)
  30.  
  31.     n = p * q
  32.     phi = (p - 1) * (q - 1)
  33.  
  34.     e = random.randrange(1, phi)
  35.  
  36.     g = gcd(e, phi)
  37.     while g != 1:
  38.         e = random.randrange(1, phi)
  39.         g = gcd(e, phi)
  40.  
  41.     d = modinv(e, phi)
  42.  
  43.     return ((e, n), (d, n))
  44.  
  45.  
  46. def encrypt(pk, plaintext):
  47.     key, n = pk
  48.     cipher = [pow(ord(char), key, n) for char in plaintext]
  49.     return cipher
  50.  
  51.  
  52. def decrypt(pk, ciphertext):
  53.     key, n = pk
  54.     plain = [chr(pow(char, key, n)) for char in ciphertext]
  55.     print(plain)
  56.     return ''.join(plain)
  57.  
  58.  
  59. public, private = get_keys()
  60. print(public, private)
  61.  
  62. timing = []
  63. message_len = []
  64. # Parameter tuning on range and base message
  65. for i in range(101):
  66.     base_message = "FoundationsOFCybersecurity BaseMessage of Length50"
  67.     print(len(base_message))
  68.     message = base_message + 'x' * i
  69.     print(message)
  70.     start = time.time()
  71.     cipher = encrypt(public, message)
  72.     time_taken = time.time() - start
  73.     timing.append(time_taken)
  74.     message_len.append(len(message))
  75.     print(time_taken)
  76.     print("Message Len: ", len(message))
  77.  
  78. plt.xlabel("Message Length")
  79. plt.ylabel("Time in sec")
  80. plt.plot(message_len, timing)
  81. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement