Advertisement
aolivens

Python CAST String Encryption & Decryption

Sep 13th, 2013
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.62 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. key_size = 16
  14. modes = ["(1) ECB    ", "(2) CBC    ", "(3) CFB    "]
  15. mtypes = ["(1) Encrypt", "(2) Decrypt", "(3) Exit   "]
  16. castbt = ["(1) 128    ", "(2) 256    "]
  17.  
  18.  
  19. #=====================================#
  20. #==============FUNCTIONS==============#
  21. #=====================================#
  22.  
  23. def menu(parameter):
  24.     print "     +===========+"
  25.     print "     |    MENU   |"
  26.     print "     |-----------|"
  27.     for word in parameter:
  28.         print "     |%s|" % word
  29.         print "     |----------|"
  30.        
  31.  
  32. #defines encryption algorithm
  33. def enc(key_size, block_size, iv_size, mode):
  34.    
  35.     #get key and pad it 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.     data = pad(data)
  43.    
  44.     #generate random IV
  45.     iv = Random.new().read(iv_size)
  46.    
  47.     #define what is needed for CAST
  48.     cipher = CAST.new(key, mode, iv)
  49.    
  50.     #encode using base64 and encrypt data and add IV
  51.     output = base64.b64encode(iv + cipher.encrypt(data))
  52.    
  53.     print "The encrypted message is: ", output
  54.    
  55. #defines the decryption algorithm
  56. def dec(block_size, key_size, iv_size, mode):
  57.     #get key and pad it if necessary
  58.     key = raw_input("Please enter a key: ")
  59.     key += (key_size - len(key) % key_size) * chr(key_size - len(key) % key_size)
  60.    
  61.     #get data and decode base64
  62.     data = raw_input("Please enter a string to encrypt: ")
  63.     data = base64.b64decode(data)
  64.    
  65.     #get IV
  66.     iv = data[:iv_size]
  67.    
  68.     #strip padding
  69.     strippad = lambda data: data[0:-ord(data[-1])]
  70.    
  71.     #define what is needed for CAST
  72.     cipher = CAST.new(key, mode, iv)
  73.    
  74.     #strip off padding and decrypt data
  75.     output = strippad(cipher.decrypt(data[iv_size:]))
  76.    
  77.     print "The decrypted message is: ", output
  78.    
  79. #=====================================#
  80. #===========MAIN PROGRAM==============#
  81. #=====================================#
  82.  
  83. def main():
  84.     menu(mtypes)
  85.     mtypes_choice = input("Please select to encrypt, decrypt, or exit(1-3): ")
  86.    
  87.     #Encryption
  88.     if mtypes_choice == 1:
  89.         menu(castbt)
  90.         castbt_choice = input("Please select to use 128 or 256 bits(1-2): ")
  91.        
  92.         #128 Bit
  93.         if castbt_choice == 1:
  94.             block_size = 8
  95.             iv_size = 8
  96.             menu(modes)
  97.             modes_choice = input("Please select a mode of encryption(1-3): ")
  98.            
  99.             #MODES
  100.             if modes_choice == 1:
  101.                 mode = CAST.MODE_ECB
  102.                 enc(key_size, block_size, iv_size, mode)
  103.             elif mode_choice == 2:
  104.                 mode = CAST.MODE_CBC
  105.                 enc(key_size, block_size, iv_size, mode)
  106.             elif mode_choice == 3:
  107.                 mode = CAST.MODE_CFB
  108.                 enc(key_size, block_size, iv_size, mode)
  109.        
  110.         #256 Bit
  111.         elif castbt_choice == 2:
  112.             block_size = 16
  113.             iv_size = 8
  114.             menu(modes)
  115.             modes_choice = input("Please select a mode of encryption(1-3): ")
  116.            
  117.             #MODES
  118.             if modes_choice == 1:
  119.                 mode = CAST.MODE_ECB
  120.                 enc(key_size, block_size, iv_size, mode)
  121.             elif mode_choice == 2:
  122.                 mode = CAST.MODE_CBC
  123.                 enc(key_size, block_size, iv_size, mode)
  124.             elif mode_choice == 3:
  125.                 mode = CAST.MODE_CFB
  126.                 enc(key_size, block_size, iv_size, mode)
  127.    
  128.     #Decryption
  129.     elif mtypes_choice == 2:
  130.    
  131.         #128 Bit
  132.         if castbt_choice == 1:
  133.             block_size = 8
  134.             iv_size = 8
  135.             menu(modes)
  136.             modes_choice = input("Please select a mode of encryption(1-3): ")
  137.            
  138.             #MODES
  139.             if modes_choice == 1:
  140.                 mode = CAST.MODE_ECB
  141.                 dec(key_size, block_size, iv_size, mode)
  142.             elif mode_choice == 2:
  143.                 mode = CAST.MODE_CBC
  144.                 dec(key_size, block_size, iv_size, mode)
  145.             elif mode_choice == 3:
  146.                 mode = CAST.MODE_CFB
  147.                 dec(key_size, block_size, iv_size, mode)
  148.        
  149.         #256 Bit
  150.         elif castbt_choice == 2:
  151.             block_size = 16
  152.             iv_size = 8
  153.             menu(modes)
  154.             modes_choice = input("Please select a mode of encryption(1-3): ")
  155.            
  156.             #MODES
  157.             if modes_choice == 1:
  158.                 mode = CAST.MODE_ECB
  159.                 dec(key_size, block_size, iv_size, mode)
  160.             elif mode_choice == 2:
  161.                 mode = CAST.MODE_CBC
  162.                 dec(key_size, block_size, iv_size, mode)
  163.             elif mode_choice == 3:
  164.                 mode = CAST.MODE_CFB
  165.                 dec(key_size, block_size, iv_size, mode)
  166.    
  167.     #Exit
  168.     elif mtypes_choice == 3:
  169.         print "Exiting Program. Goodbye!"
  170.         print
  171.         return
  172.    
  173.     #Fault
  174.     else:
  175.         print "ERROR. Invalid Selection."
  176.         print
  177.         return main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement