def main(argv): if argv[0] == 'enum_key': print enum_key(argv[1]) elif argv[0] == 'crack': """TODO: Add your own code and do whatever you do. """ message = open('plaintext', 'r').read() message_binary = '0' + bin(int(binascii.hexlify(message), 16))[2:] message_binary_list = [int(x) for x in message_binary] ciphertext = open('ciphertext', 'r').read() ranges = ['8080010d80808080', '8080010d7f7f7f7f'] start_binary = bin(int(ranges[0], 16))[2:] end_binary = bin(int(ranges[1], 16))[2:] startbinary_byte_blocks = [ start_binary[0 + i:8 + i] for i in range(0, len(start_binary), 8) ] endbinary_byte_blocks = [ end_binary[0 + i:8 + i] for i in range(0, len(end_binary), 8) ] for i in range(len(startbinary_byte_blocks)): startbinary_byte_blocks[i] = startbinary_byte_blocks[i][1:] for i in range(len(endbinary_byte_blocks)): endbinary_byte_blocks[i] = endbinary_byte_blocks[i][1:] start_removed_parity_binary = ''.join( str(i) for i in startbinary_byte_blocks) start = int(start_removed_parity_binary, 2) end_removed_parity_binary = ''.join( str(i) for i in endbinary_byte_blocks) end = int(end_removed_parity_binary, 2) start = start + 68435456 end = start + 100000000 start_time = time.time() while start <= end: key_list = get_key(start) cracked_bytes = bits2bytes( dw.des_encrypt(key_list, message_binary_list)) if cracked_bytes == ciphertext: print "Cracked bytes: " + cracked_bytes break start += 1 end_time = time.time() print "Consumed CPU time=%f" % (end_time - start_time) else: raise Exception("Wrong mode!")
def main(argv): if argv[0] == 'enum_key': print enum_key(argv[1]) elif argv[0] == 'crack': #load in my ciphertext and plaintext f = open('ciphertext_student_247.txt', 'r') ciphertext = f.read() g = open('plaintext', 'r') plaintext = g.read() binary_message = bin(int(binascii.hexlify(plaintext),16))[2:].zfill(64) binary_message_list = map(int,list(binary_message)) start = time.time() #start the count #first try (I know, this violates the DON'T-REPEAT-YOURSELF rule) currentKey = '8080807580808080' #starter key for Nick Lee binary_current = convert_to_binary(currentKey) test = des_wrapper.des_encrypt(binary_current, binary_message_list) test = bit2str(test) number_of_tries = 1 if test == ciphertext: print "Found it on the first try! The key is: " + currentKey else: while currentKey != '808080757f7f7f7f': #end key for Nick Lee currentKey = enum_key(currentKey) binary_current = convert_to_binary(currentKey) test = des_wrapper.des_encrypt(binary_current, binary_message_list) test = bit2str(test) number_of_tries += 1 if test == ciphertext: print "Found it after " + str(number_of_tries) + " tries. The key is: " + currentKey break end = time.time() print "Consumed CPU time=%f" % (end - start) print "Average number per minute = %f" % (number_of_tries/(end-start)*60) else: raise Exception("Wrong mode!")
def main(argv): if argv[0] == 'enum_key': print enum_key(argv[1]) elif argv[0] == 'crack': """TODO: Add your own code and do whatever you do. """ message = open('plaintext', 'r').read() message_binary = '0' + bin(int(binascii.hexlify(message), 16))[2:] message_binary_list = [int(x) for x in message_binary] ciphertext = open('ciphertext', 'r').read() ranges = ['8080010d80808080','8080010d7f7f7f7f'] start_binary = bin(int(ranges[0], 16))[2:] end_binary = bin(int(ranges[1], 16))[2:] startbinary_byte_blocks = [start_binary[0+i:8+i] for i in range(0, len(start_binary), 8)] endbinary_byte_blocks = [end_binary[0+i:8+i] for i in range(0, len(end_binary), 8)] for i in range(len(startbinary_byte_blocks)): startbinary_byte_blocks[i] = startbinary_byte_blocks[i][1:] for i in range(len(endbinary_byte_blocks)): endbinary_byte_blocks[i] = endbinary_byte_blocks[i][1:] start_removed_parity_binary = ''.join(str(i) for i in startbinary_byte_blocks) start = int(start_removed_parity_binary, 2) end_removed_parity_binary = ''.join(str(i) for i in endbinary_byte_blocks) end = int(end_removed_parity_binary, 2) start = start + 68435456 end = start + 100000000 start_time = time.time() while start <= end: key_list = get_key(start) cracked_bytes = bits2bytes(dw.des_encrypt(key_list, message_binary_list)) if cracked_bytes == ciphertext: print "Cracked bytes: " + cracked_bytes break start +=1 end_time = time.time() print "Consumed CPU time=%f"% (end_time - start_time) else: raise Exception("Wrong mode!")
def main(argv): if argv[0] == 'enum_key': print(enum_key(argv[1])) elif argv[0] == 'crack': """TODO: Add your own code and do whatever you do. """ plaintext = open('plaintext', 'r').read() print "plaintext = ", plaintext plaintext_bin = '0' + bin(int(binascii.hexlify(plaintext), 16))[2:] plaintext_list = [int(x) for x in plaintext_bin] ciphertext = open('ciphertext', 'r').read() keyrange = ['808080C180808080', '808080C17F7F7F7F'] start_bin = bin(int(keyrange[0], 16))[2:] if len(start_bin) < 64: start_bin = (64 - len(start_bin)) * '0' + start_bin end_bin = bin(int(keyrange[1], 16))[2:] if len(end_bin) < 64: end_bin = (64 - len(end_bin)) * '0' + end_bin startbin_blocks = [ start_bin[0 + i:8 + i] for i in range(0, len(start_bin), 8) ] endbin_blocks = [ end_bin[0 + i:8 + i] for i in range(0, len(end_bin), 8) ] for i in range(len(startbin_blocks)): startbin_blocks[i] = startbin_blocks[i][1:] for i in range(len(endbin_blocks)): endbin_blocks[i] = endbin_blocks[i][1:] start_rmparity_bin = ''.join(str(i) for i in startbin_blocks) #print "length of start_rmparity_bin = ", len(start_rmparity_bin) start = int(start_rmparity_bin, 2) #print "start = ", start end_rmparity_bin = ''.join(str(i) for i in endbin_blocks) #print "length of end_rmparity_bin = ", len(end_rmparity_bin) end = int(end_rmparity_bin, 2) print end - start begintime = time.time() while start <= end: #to_hex = hex(start)[2:len(hex(start))-1] #key = bin(int(enum_key(to_hex), 16))[2:] #keylist = [int(x) for x in key] keylist = generatekey(start) decrypttext = bit2byte( des_wrapper.des_encrypt(keylist, plaintext_list)) #print decrypttext if decrypttext == ciphertext: print 'key found' break start += 1 #print "start = ",start endtime = time.time() print "time difference is = ", endtime - begintime else: raise Exception("Wrong mode!")
def main(argv): if argv[0] == 'enum_key': print enum_key(argv[1]) elif argv[0] == 'crack': """TODO: Add your own code and do whatever you do. """ message = open('plaintext', 'r').read() message_binary = '0' + bin(int(binascii.hexlify(message), 16))[2:] message_binary_list = [int(x) for x in message_binary] print len(message_binary_list) ciphertext = open('ciphertext', 'r').read() print len(ciphertext) ranges = ['8080010d80808080','8080010d7f7f7f7f'] #start = int(enum_key(range[0]), 16) #end = int(enum_key(range[1]), 16) start_binary = bin(int(ranges[0], 16))[2:] end_binary = bin(int(ranges[1], 16))[2:] startbinary_byte_blocks = [start_binary[0+i:8+i] for i in range(0, len(start_binary), 8)] endbinary_byte_blocks = [end_binary[0+i:8+i] for i in range(0, len(end_binary), 8)] for i in range(len(startbinary_byte_blocks)): startbinary_byte_blocks[i] = startbinary_byte_blocks[i][1:] for i in range(len(endbinary_byte_blocks)): endbinary_byte_blocks[i] = endbinary_byte_blocks[i][1:] start_removed_parity_binary = ''.join(str(i) for i in startbinary_byte_blocks) #print len(start_removed_parity_binary) start = int(start_removed_parity_binary, 2) end_removed_parity_binary = ''.join(str(i) for i in endbinary_byte_blocks) end = int(end_removed_parity_binary, 2) #print end-start #print start_removed_parity_num #get_key(start_removed_parity_num) #print end_removed_parity_num #print end_removed_parity_num - start_removed_parity_num start = start + 168435456 start_time = time.time() while start <= end: #to_hex = hex(start)[2:len(hex(start))-1] #key = bin(int(enum_key(to_hex), 16))[2:] #key_list = [int(x) for x in key] key_list = get_key(start) cracked_bytes = bits2bytes(dw.des_encrypt(key_list, message_binary_list)) if cracked_bytes == ciphertext: print 'cracked' break else: print cracked_bytes print str(float(start)/float(end)) + '%' start +=1 end_time = time.time() print "Consumed CPU time=%f"% (end_time - start_time) else: raise Exception("Wrong mode!")
def main(argv): if argv[0] == 'enum_key': print enum_key(argv[1]) elif argv[0] == 'crack': """TODO: Add your own code and do whatever you do. """ message = open('plaintext', 'r').read() message_binary = '0' + bin(int(binascii.hexlify(message), 16))[2:] message_binary_list = [int(x) for x in message_binary] print len(message_binary_list) ciphertext = open('ciphertext', 'r').read() print len(ciphertext) ranges = ['8080010d80808080', '8080010d7f7f7f7f'] #start = int(enum_key(range[0]), 16) #end = int(enum_key(range[1]), 16) start_binary = bin(int(ranges[0], 16))[2:] end_binary = bin(int(ranges[1], 16))[2:] startbinary_byte_blocks = [ start_binary[0 + i:8 + i] for i in range(0, len(start_binary), 8) ] endbinary_byte_blocks = [ end_binary[0 + i:8 + i] for i in range(0, len(end_binary), 8) ] for i in range(len(startbinary_byte_blocks)): startbinary_byte_blocks[i] = startbinary_byte_blocks[i][1:] for i in range(len(endbinary_byte_blocks)): endbinary_byte_blocks[i] = endbinary_byte_blocks[i][1:] start_removed_parity_binary = ''.join( str(i) for i in startbinary_byte_blocks) #print len(start_removed_parity_binary) start = int(start_removed_parity_binary, 2) end_removed_parity_binary = ''.join( str(i) for i in endbinary_byte_blocks) end = int(end_removed_parity_binary, 2) #print end-start #print start_removed_parity_num #get_key(start_removed_parity_num) #print end_removed_parity_num #print end_removed_parity_num - start_removed_parity_num start = start + 168435456 start_time = time.time() while start <= end: #to_hex = hex(start)[2:len(hex(start))-1] #key = bin(int(enum_key(to_hex), 16))[2:] #key_list = [int(x) for x in key] key_list = get_key(start) cracked_bytes = bits2bytes( dw.des_encrypt(key_list, message_binary_list)) if cracked_bytes == ciphertext: print 'cracked' break else: print cracked_bytes print str(float(start) / float(end)) + '%' start += 1 end_time = time.time() print "Consumed CPU time=%f" % (end_time - start_time) else: raise Exception("Wrong mode!")