Advertisement
Guest User

Key generation, encryption & example

a guest
Mar 24th, 2019
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.87 KB | None | 0 0
  1. from random import randrange
  2. from Crypto.Cipher import AES
  3. from Crypto.Util.Padding import pad, unpad
  4. from base64 import b64encode, b64decode
  5.  
  6.  
  7. def generate_key():
  8.     return randrange(1e15, 1e16 - 2)
  9.  
  10.  
  11. def generate_shared(private_key, public_key):
  12.     return str(private_key * public_key)[-16:]
  13.  
  14.  
  15. def encrypt_message(message, key):
  16.     message = str(message).encode()
  17.     key = str(key).encode()
  18.     cipher = AES.new(key, AES.MODE_CBC)
  19.     ciphertext_bytes = cipher.encrypt(pad(message, AES.block_size))
  20.     return b64encode(cipher.iv).decode('utf-8'), b64encode(ciphertext_bytes).decode('utf-8')
  21.  
  22.  
  23. def decrypt_message(key, iv, ciphertext):
  24.     key = str(key).encode()
  25.     iv = b64decode(iv)
  26.     ciphertext = b64decode(ciphertext)
  27.     cipher = AES.new(key, AES.MODE_CBC, iv)
  28.     return unpad(cipher.decrypt(ciphertext), AES.block_size).decode()
  29.  
  30.  
  31. if __name__ == '__main__':  # Testing the theory
  32.     public = 1234567890101112
  33.     client = randrange(1e15, 1e16)
  34.     server = randrange(1e15, 1e16)
  35.  
  36.     print('Public key: {:d}\nClient key: {:d}\nServer key: {:d}\n'.format(public, client, server))
  37.  
  38.     pub_cli = int(str(public * client)[-16:])  # push_zero(public * client, 15)
  39.     pub_ser = int(str(public * server)[-16:])  # push_zero(public * server, 15)
  40.  
  41.     print('Last 16 digits of public * client: {:d}\nLast 16 digits of public * server: {:d}\n'.format(pub_cli, pub_ser))
  42.  
  43.     shared_key_cli = int(str(pub_ser * client)[-16:])  # push_zero(pub_ser * client, 15)
  44.     shared_key_ser = int(str(pub_cli * server)[-16:])  # push_zero(pub_cli * server, 15)
  45.  
  46.     print('Last 16 digits of pub_ser * client: {:d}\nLast 16 digits of pub_cli * server: {:d} (This is the shared key)'
  47.           '\nshared_key_cli == shared_key_ser = {}'.format(shared_key_cli, shared_key_ser,
  48.                                                            shared_key_cli == shared_key_ser))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement