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==============#
- #=====================================#
- modes = ["(1) ECB ", "(2) CBC ", "(3) CFB "]
- mtypes = ["(1) Encrypt", "(2) Decrypt", "(3) Exit "]
- block_size = 8
- key_size = 16
- iv_size = 8
- #=====================================#
- #==============FUNCTIONS==============#
- #=====================================#
- #create menu
- 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 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 DES
- cipher = DES3.new(key, mode, iv)
- #combine IV and encrypted text | encode using base64
- output = base64.b64encode(iv + cipher.encrypt(data))
- print "The encrypted message is: ", output
- #defines decryption algorithm
- def dec(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 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 DES
- cipher = DES3.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(modes)
- menus_choice = input("Please select a mode of encryption(1-3): ")
- if menus_choice == 1:
- mode = DES3.MODE_ECB
- enc(key_size, iv_size, block_size, mode)
- elif menus_choice == 2:
- mode = DES3.MODE_CBC
- enc(key_size, iv_size, block_size, mode)
- elif menus_choice == 3:
- mode = DES3.MODE_CFB
- enc(key_size, iv_size, block_size, mode)
- #Decryption
- elif mtypes_choice == 2:
- menu(modes)
- menus_choice = input("Please select a mode of encryption(1-3): ")
- if menus_choice == 1:
- mode = DES3.MODE_ECB
- dec(key_size, iv_size, block_size, mode)
- elif menus_choice == 2:
- mode = DES3.MODE_CBC
- dec(key_size, iv_size, block_size, mode)
- elif menus_choice == 3:
- mode = DES3.MODE_CFB
- dec(key_size, iv_size, block_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
Advertisement