return return_value if __name__ == "__main__": parser = argparse.ArgumentParser(description="Generate a rainbow table") parser.add_argument("-s", "--size", required=True, nargs=1, help="Size of the alphabet") parser.add_argument("-a", "--alphabet", required=True, nargs=1, help="Alphabet") parser.add_argument("-o", "--output", required=True, nargs=1, help="Rainbow table file") args = parser.parse_args() alphabet_size = int(args.size[0]) alphabet = parse_alphabet(args.alphabet[0]) print(alphabet) with open(args.output[0], "w") as file_out: print("0/%s" % alphabet_size) for i in range(alphabet_size): start_time = time.time() for c in itertools.product(alphabet, repeat=(i+1)): word = ''.join(c) file_out.write("%s " % word) for j in range(1000): hash_string = hash_utilities.reduce(hash_utilities.hash(word)) file_out.write("%s\n" % hash_string) print("%s/%s [ %s ]" % (i+1, alphabet_size, time.time() - start_time))
def success(value): print("%s => %s" % (input_hash, value)) if __name__ == "__main__": parser = argparse.ArgumentParser(description="Crack a hash using a rainbow table") parser.add_argument("hash", nargs=1, help="Hash to crack") parser.add_argument("-i", "--input", nargs=1, help="Rainbow table file") args = parser.parse_args() input_hash = args.hash[0] rainbow_table = {} with open(args.input[0]) as f: for line in f: plain, hashed = line.split(" ") rainbow_table[hash_utilities.reduce(hashed.strip())] = plain if input_hash in rainbow_table.keys(): success(rainbow_table[input_hash]) else: word = input_hash for i in range(1000): word = hash_utilities.reduce(word) if word in rainbow_table.keys(): success(rainbow_table[word]) break else: word = hash_utilities.hash(word)