Python code


SUBMITTED BY: veekna

DATE: July 13, 2020, 10:51 a.m.

FORMAT: Text only

SIZE: 2.0 kB

HITS: 1047

  1. import random
  2. isprime = lambda number: all(number % i for i in range(2, number))
  3. class RSA:
  4. e = 3
  5. def __init__(self, *args, **kwargs):
  6. self.initialize(*args, **kwargs)
  7. def initialize(self, *args, **kwargs):
  8. if args: self.p, self.q = args
  9. else:
  10. kwargs = kwargs or {'start': 100, 'end':400}
  11. simples = [i for i in range(kwargs['start'], kwargs['end']) if isprime(i)]
  12. self.p = random.choice(simples)
  13. while True:
  14. self.q = random.choice(simples)
  15. if self.q != self.p: break;
  16. print (self.p, self.q)
  17. self.n = self.q * self.p
  18. self.euler_value = (self.p-1)*(self.q-1)
  19. if not self.create_secret_key():
  20. if args:
  21. arg = int(input('Worth p/q pair for secret_exp calculate. Input other q value: '))
  22. self.initialize(args[0], arg)
  23. else:
  24. self.initialize()
  25. def create_secret_key(self, start=100, end=100000):
  26. for i in range(start, end):
  27. if (i * self.e) % self.euler_value == 1:
  28. self.secret_exp = i
  29. return self.secret_exp, self.n
  30. return None
  31. generate_open_key = lambda self: (self.e, self.n,)
  32. encrypt_value = lambda self, value: (value ** self.e) % self.n
  33. decrypt_value = lambda self, value: (value ** self.secret_exp) % self.n
  34. def main():
  35. rsa = RSA()
  36. print(rsa)
  37. # s_key = rsa.create_secret_key()
  38. s_key = rsa.secret_exp
  39. print(s_key)
  40. o_key = rsa.generate_open_key()
  41. print(o_key)
  42. val = int(input("Enter value for decryption: ")) or 111111
  43. enc_value = (rsa.encrypt_value(val))
  44. print (enc_value)
  45. input("Enter any key for decryption ")
  46. print(rsa.decrypt_value(enc_value))
  47. # print( isprime(6111579))
  48. if __name__ == '__main__':
  49. main()

comments powered by Disqus