Advertisement
aolivens

Python DES String Encryption & Decryption

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