aolivens

Python Blowfish String Encryption & Decryption

Sep 13th, 2013
942
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.88 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. iv_size = 8
  17. key_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 = Blowfish.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 Blowfish
  76.         cipher = Blowfish.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.     mtypes_choice = input("Please select to encrypt, decrypt, or exit(1-3): ")
  89.    
  90.     #Encryption
  91.     if mtypes_choice == 1:
  92.         menu(modes)
  93.         modes_choice = input("Please select a mode of encryption(1-3): ")
  94.        
  95.         if modes_choice == 1:
  96.             mode = Blowfish.MODE_ECB
  97.             enc(key_size, block_size, iv_size, mode)
  98.         elif modes_choice == 2:
  99.             mode = Blowfish.MODE_CBC
  100.             enc(key_size, block_size, iv_size, mode)
  101.         elif modes_choice == 3:
  102.             mode = Blowfish.MODE_CFB
  103.             enc(key_size, block_size, iv_size, mode)
  104.            
  105.     #Decryption
  106.     elif mtypes_choice == 2:
  107.         menu(modes)
  108.         modes_choice = input("Please select to encrypt, decrypt, or exit(1-3): ")
  109.        
  110.         if modes_choice == 1:
  111.             mode = Blowfish.MODE_ECB
  112.             dec(key_size, block_size, iv_size, mode)
  113.         elif modes_choice == 2:
  114.             mode = Blowfish.MODE_CBC
  115.             dec(key_size, block_size, iv_size, mode)
  116.         elif modes_choice == 3:
  117.             mode = Blowfish.MODE_CFB
  118.             dec(key_size, block_size, iv_size, mode)
  119.            
  120.     #Exit
  121.     elif mtypes_choice == 3:
  122.         print "Exiting Program. Goodbye!"
  123.         print
  124.         return
  125.     #Fault
  126.     else:
  127.         print "ERROR. Invalid Selection."
  128.         print
  129.         print
  130.         return main()
Advertisement
Add Comment
Please, Sign In to add comment