Advertisement
aolivens

Python AES String Encryption & Decryption

Sep 13th, 2013
315
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.51 KB | None | 0 0
  1. #=====================================#
  2. #==============MODULES================#
  3. #=====================================#
  4.  
  5. from Crypto.Cipher import *
  6. from Crypto import Random
  7. import base64
  8.  
  9. #=====================================#
  10. #==============VARIABLES==============#
  11. #=====================================#
  12.  
  13. menus = ["(1) AES-16 ", "(2) AES-24 ", "(3) AES-32 "]
  14. modes = ["(1) ECB    ", "(2) CBC    ", "(3) CFB    "]
  15. mtypes = ["(1) Encrypt", "(2) Decrypt", "(3) Exit   "]
  16. iv_size = 16
  17. block_size = 16
  18.  
  19. #=====================================#
  20. #==============FUNCTIONS==============#
  21. #=====================================#
  22.  
  23. #creates menus
  24. def menu(parameter):
  25.     print "     +===========+"
  26.     print "     |    MENU   |"
  27.     print "     |-----------|"
  28.     for word in parameter:
  29.         print "     |%s|" %word
  30.         print "     |-----------|"
  31.  
  32. #define encryption algorithm       
  33. def enc(key_size, block_size, iv_size, mode):
  34.    
  35.     #get key and pad if necessary
  36.     key = raw_input("Please enter a key: ")
  37.     key += (key_size - len(key) % key_size) * chr(key_size - len(key) % key_size)
  38.    
  39.     #get data and pad if necessary
  40.     data = raw_input("Please enter a string to encrypt: ")
  41.     pad = lambda data: data + (block_size - len(data) % block_size) * chr(block_size - len(data) % block_size)
  42.    
  43.     #pad data
  44.     data = pad(data)
  45.    
  46.     # generate random IV
  47.     iv = Random.new().read(iv_size)
  48.    
  49.     #Est. what is needed for AES Encryption
  50.     cipher = AES.new(key, mode, iv)
  51.    
  52.     #Combine IV and Data string and encode using base64
  53.     output = base64.b64encode(iv + cipher.encrypt(data))
  54.    
  55.     #final encryption has IV[:16] and Data[16:]
  56.     print "The encrypted message is: ", output
  57.  
  58. #define decryption algorithm
  59. def dec(key_size, block_size, iv_size, mode):
  60.  
  61.     #get key & pad if necessary
  62.     key = raw_input("Please enter a key: ")
  63.     key += (key_size - len(key) % key_size) * chr(key_size - len(key) % key_size)
  64.    
  65.     #get data with IV & decode base64
  66.     data = raw_input("Please enter a string to decrypt: ")
  67.     data = base64.b64decode(data)
  68.    
  69.     #get IV
  70.     iv = data[:iv_size]
  71.    
  72.     #strip padding
  73.     strippad = lambda data: data[0:-ord(data[-1])]
  74.    
  75.     #define what is needed for AES
  76.     cipher = AES.new(key, mode, iv)
  77.    
  78.     #strip off padding and decrypt data
  79.     output = strippad(cipher.decrypt(data[iv_size:]))
  80.    
  81.     print output
  82. #=====================================#
  83. #===========MAIN PROGRAM==============#
  84. #=====================================#
  85.  
  86. def main():
  87.     menu(mtypes)
  88.    
  89.     mtypes_choice = input("Please select to encrypt, decrypt or exit (1-3): ")
  90.    
  91.     #Encryption
  92.     if mtypes_choice == 1:
  93.         menu(menus)
  94.         menus_choice = input("Please select an type of AES encryption scheme(1-3): ")
  95.        
  96.         #AES-16 ENCRYPTION
  97.         if menus_choice == 1:
  98.             key_size = 16
  99.             menu(modes)
  100.             modes_choice = input("Please select a mode of encryption(1-3): ")
  101.             if modes_choice == 1:
  102.                 mode = AES.MODE_ECB
  103.                 enc(key_size, block_size, iv_size, mode)
  104.             elif modes_choice == 2:
  105.                 mode = AES.MODE_CBC
  106.                 enc(key_size, block_size, iv_size, mode)
  107.             elif modes_choice == 3:
  108.                 mode = AES.MODE_CFB
  109.                 enc(key_size, block_size, iv_size, mode)
  110.                  
  111.         #AES-24 ENCRYPTION
  112.         elif menus_choice == 2:
  113.             key_size = 24
  114.             menu(modes)
  115.             modes_choice = input("Please select a mode of encryption(1-3): ")
  116.             if modes_choice == 1:
  117.                 mode = AES.MODE_ECB
  118.                 enc(key_size, block_size, iv_size, mode)
  119.             elif modes_choice == 2:
  120.                 mode = AES.MODE_CBC
  121.                 enc(key_size, block_size, iv_size, mode)
  122.             elif modes_choice == 3:
  123.                 mode = AES.MODE_CFB
  124.                 enc(key_size, block_size, iv_size, mode)
  125.                  
  126.         #AES-32 ENCRYPTION
  127.         elif menus_choice == 3:
  128.             key_size = 32
  129.             menu(modes)
  130.             modes_choice = input("Please select a mode of encryption(1-3): ")
  131.             if modes_choice == 1:
  132.                 mode = AES.MODE_ECB
  133.                 enc(key_size, block_size, iv_size, mode)
  134.             elif modes_choice == 2:
  135.                 mode = AES.MODE_CBC
  136.                 enc(key_size, block_size, iv_size, mode)
  137.             elif modes_choice == 3:
  138.                 mode = AES.MODE_CFB
  139.                 enc(key_size, block_size, iv_size, mode)
  140.                  
  141.    
  142.     #Decryption
  143.     elif mtypes_choice == 2:
  144.     menu(menus)
  145.     menus_choice = input("Please select a type of AES encryption scheme(1-3): ")
  146.        
  147.         #AES-16 DECRYPTION
  148.         if menus_choice == 1:
  149.             key_size = 16
  150.             menu(modes)
  151.             modes_choice = input("Please select a mode of encryption(1-3): ")
  152.             if modes_choice == 1:
  153.                 mode = AES.MODE_ECB
  154.                 dec(key_size, block_size, iv_size, mode)
  155.             elif modes_choice == 2:
  156.                 mode = AES.MODE_CBC
  157.                 dec(key_size, block_size, iv_size, mode)
  158.             elif modes_choice == 3:
  159.                 mode = AES.MODE_CFB
  160.                 dec(key_size, block_size, iv_size, mode)
  161.                  
  162.         #AES-24 DECRYPTION
  163.         elif menus_choice == 2:
  164.             key_size = 24
  165.             menu(modes)
  166.             modes_choice = input("Please select a mode of encryption(1-3): ")
  167.             if modes_choice == 1:
  168.                 mode = AES.MODE_ECB
  169.                 dec(key_size, block_size, iv_size, mode)
  170.             elif modes_choice == 2:
  171.                 mode = AES.MODE_CBC
  172.                 dec(key_size, block_size, iv_size, mode)
  173.             elif modes_choice == 3:
  174.                 mode = AES.MODE_CFB
  175.                 dec(key_size, block_size, iv_size, mode)
  176.                  
  177.         #AES-32 DECRYPTION
  178.         elif menus_choice == 3:
  179.             key_size = 32
  180.             menu(modes)
  181.             modes_choice = input("Please select a mode of encryption(1-3): ")
  182.             if modes_choice == 1:
  183.                 mode = AES.MODE_ECB
  184.                 dec(key_size, block_size, iv_size, mode)
  185.             elif modes_choice == 2:
  186.                 mode = AES.MODE_CBC
  187.                 dec(key_size, block_size, iv_size, mode)
  188.             elif modes_choice == 3:
  189.                 mode = AES.MODE_CFB
  190.                 dec(key_size, block_size, iv_size, mode)
  191.                  
  192.     #Exit
  193.     elif mtypes_choice == 3:
  194.         print "Exiting Program. Goodbye."
  195.         return
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement