import random isprime = lambda number: all(number % i for i in range(2, number)) class RSA: e = 3 def __init__(self, *args, **kwargs): self.initialize(*args, **kwargs) def initialize(self, *args, **kwargs): if args: self.p, self.q = args else: kwargs = kwargs or {'start': 100, 'end':400} simples = [i for i in range(kwargs['start'], kwargs['end']) if isprime(i)] self.p = random.choice(simples) while True: self.q = random.choice(simples) if self.q != self.p: break; print (self.p, self.q) self.n = self.q * self.p self.euler_value = (self.p-1)*(self.q-1) if not self.create_secret_key(): if args: arg = int(input('Worth p/q pair for secret_exp calculate. Input other q value: ')) self.initialize(args[0], arg) else: self.initialize() def create_secret_key(self, start=100, end=100000): for i in range(start, end): if (i * self.e) % self.euler_value == 1: self.secret_exp = i return self.secret_exp, self.n return None generate_open_key = lambda self: (self.e, self.n,) encrypt_value = lambda self, value: (value ** self.e) % self.n decrypt_value = lambda self, value: (value ** self.secret_exp) % self.n def main(): rsa = RSA() print(rsa) # s_key = rsa.create_secret_key() s_key = rsa.secret_exp print(s_key) o_key = rsa.generate_open_key() print(o_key) val = int(input("Enter value for decryption: ")) or 111111 enc_value = (rsa.encrypt_value(val)) print (enc_value) input("Enter any key for decryption ") print(rsa.decrypt_value(enc_value)) # print( isprime(6111579)) if __name__ == '__main__': main()