From a9af9b24b7fbfb31110123b125fb7fc916cff24f Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Fri, 12 Feb 2016 14:50:35 +0100 Subject: Put everything on git --- Assignment 3/des-demo.py | 62 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100755 Assignment 3/des-demo.py (limited to 'Assignment 3/des-demo.py') diff --git a/Assignment 3/des-demo.py b/Assignment 3/des-demo.py new file mode 100755 index 0000000..0a4954f --- /dev/null +++ b/Assignment 3/des-demo.py @@ -0,0 +1,62 @@ +#!/usr/bin/python + +# Copyright (c) 2015 Camil Staps + +import sys, getopt, binascii +from Crypto.Cipher import DES + +def main(argv): + key = '' + plaintext = '' + ciphertext = '' + + # Parse arguments. Use -h for help. + try: + opts, args = getopt.getopt(argv, "hk:p:c:", ["key=","plaintext=","ciphertext="]) + except getopt.GetoptError: + usage() + sys.exit(2) + + for opt, arg in opts: + if opt == '-h': + usage() + sys.exit() + elif opt in ("-k", "--key"): + key = binascii.a2b_hex(arg) + elif opt in ("-p", "--plaintext"): + plaintext = binascii.a2b_hex(arg) + elif opt in ("-c", "--ciphertext"): + ciphertext = binascii.a2b_hex(arg) + + if key == '' or plaintext == '' and ciphertext == '': + usage() + sys.exit(2) + + # PyCrypto does the hard work + cipher = DES.new(key, DES.MODE_ECB) + + encryption = '' + decryption = '' + + if plaintext != '': + encryption = cipher.encrypt(plaintext) + if ciphertext != '': + decryption = cipher.decrypt(ciphertext) + + # When plaintext and ciphertext are provided, output if DES[k](p) = c. Otherwise, output the encryption / decryption. + if encryption != '' and decryption != '': + print encryption == ciphertext + elif encryption != '': + print binascii.b2a_hex(encryption) + elif decryption != '': + print binascii.b2a_hex(decryption) + +def usage(): + print 'Usage: des-demo.py -k [-p ] [-c <ciphertext>]' + print ' key : an 8-byte value entered as hexadecimal numbers' + print ' plaintext : an 8-byte value entered as hexadecimal numbers' + print ' ciphertext : an 8-byte value entered as hexadecimal numbers' + print 'At least one of plaintext and ciphertext should be provided. When both are provided, we check if DES[k](p) = c.' + +if __name__ == "__main__": + main(sys.argv[1:]) -- cgit v1.2.3