Advertisement
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==============#
- #=====================================#
- key_size = 16
- modes = ["(1) ECB ", "(2) CBC ", "(3) CFB "]
- mtypes = ["(1) Encrypt", "(2) Decrypt", "(3) Exit "]
- castbt = ["(1) 128 ", "(2) 256 "]
- #=====================================#
- #==============FUNCTIONS==============#
- #=====================================#
- def menu(parameter):
- print " +===========+"
- print " | MENU |"
- print " |-----------|"
- for word in parameter:
- print " |%s|" % word
- print " |----------|"
- #defines encryption algorithm
- def enc(key_size, block_size, iv_size, mode):
- #get key and pad it 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)
- data = pad(data)
- #generate random IV
- iv = Random.new().read(iv_size)
- #define what is needed for CAST
- cipher = CAST.new(key, mode, iv)
- #encode using base64 and encrypt data and add IV
- output = base64.b64encode(iv + cipher.encrypt(data))
- print "The encrypted message is: ", output
- #defines the decryption algorithm
- def dec(block_size, key_size, iv_size, mode):
- #get key and pad it 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 decode base64
- data = raw_input("Please enter a string to encrypt: ")
- 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 CAST
- cipher = CAST.new(key, mode, iv)
- #strip off padding and decrypt data
- output = strippad(cipher.decrypt(data[iv_size:]))
- print "The decrypted message is: ", 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(castbt)
- castbt_choice = input("Please select to use 128 or 256 bits(1-2): ")
- #128 Bit
- if castbt_choice == 1:
- block_size = 8
- iv_size = 8
- menu(modes)
- modes_choice = input("Please select a mode of encryption(1-3): ")
- #MODES
- if modes_choice == 1:
- mode = CAST.MODE_ECB
- enc(key_size, block_size, iv_size, mode)
- elif mode_choice == 2:
- mode = CAST.MODE_CBC
- enc(key_size, block_size, iv_size, mode)
- elif mode_choice == 3:
- mode = CAST.MODE_CFB
- enc(key_size, block_size, iv_size, mode)
- #256 Bit
- elif castbt_choice == 2:
- block_size = 16
- iv_size = 8
- menu(modes)
- modes_choice = input("Please select a mode of encryption(1-3): ")
- #MODES
- if modes_choice == 1:
- mode = CAST.MODE_ECB
- enc(key_size, block_size, iv_size, mode)
- elif mode_choice == 2:
- mode = CAST.MODE_CBC
- enc(key_size, block_size, iv_size, mode)
- elif mode_choice == 3:
- mode = CAST.MODE_CFB
- enc(key_size, block_size, iv_size, mode)
- #Decryption
- elif mtypes_choice == 2:
- #128 Bit
- if castbt_choice == 1:
- block_size = 8
- iv_size = 8
- menu(modes)
- modes_choice = input("Please select a mode of encryption(1-3): ")
- #MODES
- if modes_choice == 1:
- mode = CAST.MODE_ECB
- dec(key_size, block_size, iv_size, mode)
- elif mode_choice == 2:
- mode = CAST.MODE_CBC
- dec(key_size, block_size, iv_size, mode)
- elif mode_choice == 3:
- mode = CAST.MODE_CFB
- dec(key_size, block_size, iv_size, mode)
- #256 Bit
- elif castbt_choice == 2:
- block_size = 16
- iv_size = 8
- menu(modes)
- modes_choice = input("Please select a mode of encryption(1-3): ")
- #MODES
- if modes_choice == 1:
- mode = CAST.MODE_ECB
- dec(key_size, block_size, iv_size, mode)
- elif mode_choice == 2:
- mode = CAST.MODE_CBC
- dec(key_size, block_size, iv_size, mode)
- elif mode_choice == 3:
- mode = CAST.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
- return main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement