Advertisement
aolivens

Python 3DES String Encryption & Decryption

Sep 13th, 2013
433
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.76 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. modes = ["(1) ECB    ", "(2) CBC    ", "(3) CFB    "]
  14. mtypes = ["(1) Encrypt", "(2) Decrypt", "(3) Exit   "]
  15. block_size = 8
  16. key_size = 16
  17. iv_size = 8
  18.  
  19. #=====================================#
  20. #==============FUNCTIONS==============#
  21. #=====================================#
  22.  
  23. #create menu
  24. def menu(parameter):
  25.         print "         +===========+"
  26.         print "         |    MENU   |"
  27.         print "         |-----------|"
  28.         for word in parameter:
  29.                 print "         |%s|" % word
  30.                 print "         |-----------|"
  31.  
  32. #defines 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.         data = pad(data)
  43.        
  44.         #generate random IV
  45.         iv = Random.new().read(iv_size)
  46.        
  47.         #define what is needed for DES
  48.         cipher = DES3.new(key, mode, iv)
  49.        
  50.         #combine IV and encrypted text | encode using base64
  51.         output = base64.b64encode(iv + cipher.encrypt(data))
  52.    
  53.     print "The encrypted message is: ", output
  54.  
  55. #defines decryption algorithm      
  56. def dec(key_size, block_size, iv_size, mode):
  57.        
  58.         #get key and pad if necessary
  59.         key = raw_input("Please enter a key: ")
  60.         key += (key_size - len(key) % key_size) * chr(key_size - len(key) % key_size)
  61.        
  62.         #get data and decode base64
  63.         data = raw_input("Please enter a string to decrypt: ")
  64.         data = base64.b64decode(data)
  65.        
  66.         #get IV
  67.         iv = data[:iv_size]
  68.        
  69.         #strip padding
  70.         strippad = lambda data: data[0:-ord(data[-1])]
  71.        
  72.         #define what is needed for DES
  73.         cipher = DES3.new(key, mode, iv)
  74.        
  75.         #strip off padding and decrypt data
  76.         output = strippad(cipher.decrypt(data[iv_size:]))
  77.        
  78.         print "The decrypted message is: ", output
  79.        
  80. #=====================================#
  81. #===========MAIN PROGRAM==============#
  82. #=====================================#
  83.  
  84. def main():
  85.     menu(mtypes)
  86.     mtypes_choice = input("Please select to encrypt, decrypt, or exit(1-3): ")
  87.    
  88.     #Encryption
  89.     if mtypes_choice == 1:
  90.         menu(modes)
  91.         menus_choice = input("Please select a mode of encryption(1-3): ")
  92.        
  93.         if menus_choice == 1:
  94.             mode = DES3.MODE_ECB
  95.             enc(key_size, iv_size, block_size, mode)
  96.         elif menus_choice == 2:
  97.             mode = DES3.MODE_CBC
  98.             enc(key_size, iv_size, block_size, mode)
  99.         elif menus_choice == 3:
  100.             mode = DES3.MODE_CFB
  101.             enc(key_size, iv_size, block_size, mode)
  102.    
  103.     #Decryption
  104.     elif mtypes_choice == 2:
  105.         menu(modes)
  106.         menus_choice = input("Please select a mode of encryption(1-3): ")
  107.        
  108.         if menus_choice == 1:
  109.             mode = DES3.MODE_ECB
  110.             dec(key_size, iv_size, block_size, mode)
  111.         elif menus_choice == 2:
  112.             mode = DES3.MODE_CBC
  113.             dec(key_size, iv_size, block_size, mode)
  114.         elif menus_choice == 3:
  115.             mode = DES3.MODE_CFB
  116.             dec(key_size, iv_size, block_size, mode)
  117.    
  118.     #Exit
  119.     elif mtypes_choice == 3:
  120.         print "Exiting Program. Goodbye."
  121.         print
  122.         return
  123.    
  124.     #Fault
  125.     else:
  126.         print "ERROR. Invalid Selection."
  127.         print
  128.         print
  129.         return main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement