p1 = calc_p(d1, m, init, end) p2 = calc_p(d2, m, init, end) if (p2 > p1): reptbl = newrep rearrtbl = newrearr else: r = random.random() if (r < math.exp(p2 - p1)): reptbl = newrep rearrtbl = newrearr if (p2 > cur_max): cur_max = p2 cur_best = d2 elapsed = time.time() - start print( "Attempt {num}:\n Current best guess: {cur_best}, logP={cur_max}..." .format(num=counter, cur_best=cur_best, cur_max=cur_max)) return cur_best if __name__ == "__main__": if (len(sys.argv) != 4): raise Exception("usage: ./break_code.py coded-file corpus output-file") random.seed() encoded = encode.read_clean_file(sys.argv[1]) corpus = encode.read_clean_file(sys.argv[2]) decoded = break_code(encoded, corpus) with open(sys.argv[3], "w") as file: print(decoded, file=file)
def get_initial_encryption_tables(): letters = list(range(ord("a"), ord("z") + 1)) random.shuffle(letters) replace_table = dict( zip(map(chr, range(ord("a"), ord("z") + 1)), map(chr, letters))) rearrange_table = list(range(0, 4)) random.shuffle(rearrange_table) return replace_table, rearrange_table if __name__ == "__main__": if len(sys.argv) != 3: raise Exception("usage: break_code.py input-file output-file") input = encode.read_clean_file(sys.argv[1]) letters = list(range(ord("a"), ord("z") + 1)) random.shuffle(letters) replace_table = dict( zip(map(chr, range(ord("a"), ord("z") + 1)), map(chr, letters))) rearrange_table = list(range(0, 4)) random.shuffle(rearrange_table) with open(sys.argv[2], "w") as file: print(encode.encode(input, replace_table, rearrange_table), file=file)