Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #=====================================#
- #==============MODULES================#
- #=====================================#
- from Crypto.Cipher import *
- from Crypto import Random
- import base64
- #=====================================#
- #==============VARIABLES==============#
- #=====================================#
- modes = ["(1) ECB ", "(2) CBC ", "(3) CFB "]
- mtypes = ["(1) Encrypt", "(2) Decrypt", "(3) Exit "]
- block_size = 8
- iv_size = 8
- key_size = 16
- #=====================================#
- #==============FUNCTIONS==============#
- #=====================================#
- #creates menus
- def menu(parameter):
- print " +===========+"
- print " | MENU |"
- print " |-----------|"
- for word in parameter:
- print " |%s|" %word
- print " |-----------|"
- #define encryption algorithm
- def enc(key_size, block_size, iv_size, mode):
- #get key and pad if necessary
- key = raw_input("Please enter a key: ")
- key += (key_size - len(key) % key_size) * chr(key_size - len(key) % key_size)
- #get data and pad if necessary
- data = raw_input("Please enter a string to encrypt: ")
- pad = lambda data: data + (block_size - len(data) % block_size) * chr(block_size - len(data) % block_size)
- #pad data
- data = pad(data)
- # generate random IV
- iv = Random.new().read(iv_size)
- #Est. what is needed for AES Encryption
- cipher = Blowfish.new(key, mode, iv)
- #Combine IV and Data string and encode using base64
- output = base64.b64encode(iv + cipher.encrypt(data))
- #final encryption has IV[:16] and Data[16:]
- print "The encrypted message is: ", output
- #define decryption algorithm
- def dec(key_size, block_size, iv_size, mode):
- #get key & pad if necessary
- key = raw_input("Please enter a key: ")
- key += (key_size - len(key) % key_size) * chr(key_size - len(key) % key_size)
- #get data with IV & decode base64
- data = raw_input("Please enter a string to decrypt: ")
- data = base64.b64decode(data)
- #get IV
- iv = data[:iv_size]
- #strip padding
- strippad = lambda data: data[0:-ord(data[-1])]
- #define what is needed for Blowfish
- cipher = Blowfish.new(key, mode, iv)
- #strip off padding and decrypt data
- output = strippad(cipher.decrypt(data[iv_size:]))
- print output
- #=====================================#
- #===========MAIN PROGRAM==============#
- #=====================================#
- def main():
- menu(mtypes)
- mtypes_choice = input("Please select to encrypt, decrypt, or exit(1-3): ")
- #Encryption
- if mtypes_choice == 1:
- menu(modes)
- modes_choice = input("Please select a mode of encryption(1-3): ")
- if modes_choice == 1:
- mode = Blowfish.MODE_ECB
- enc(key_size, block_size, iv_size, mode)
- elif modes_choice == 2:
- mode = Blowfish.MODE_CBC
- enc(key_size, block_size, iv_size, mode)
- elif modes_choice == 3:
- mode = Blowfish.MODE_CFB
- enc(key_size, block_size, iv_size, mode)
- #Decryption
- elif mtypes_choice == 2:
- menu(modes)
- modes_choice = input("Please select to encrypt, decrypt, or exit(1-3): ")
- if modes_choice == 1:
- mode = Blowfish.MODE_ECB
- dec(key_size, block_size, iv_size, mode)
- elif modes_choice == 2:
- mode = Blowfish.MODE_CBC
- dec(key_size, block_size, iv_size, mode)
- elif modes_choice == 3:
- mode = Blowfish.MODE_CFB
- dec(key_size, block_size, iv_size, mode)
- #Exit
- elif mtypes_choice == 3:
- print "Exiting Program. Goodbye!"
- print
- return
- #Fault
- else:
- print "ERROR. Invalid Selection."
- print
- print
- return main()
Advertisement
Add Comment
Please, Sign In to add comment