-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsol.py
42 lines (28 loc) · 3.55 KB
/
sol.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import random
from starting_dict import starting_dict
from helpers import decrypt, swap_key_pairs, scoring_fn, bad_scoring_fn, create_freq_map
from constants import KEY_LENGTH, ITERATIONS
cipher_text = "IPAXACQBNEGDEORTHBPFCVDIUIPCIAXTTNHXBRPDXTZVIKXIZBBDNOATVEXTHDNFCAAKXTNHDXCXIPTKBKHDXTXZKBHNGHMICXUIIPCEBNXGXSZBUIWXBRPDRTKANHCSIVRODNZVAZEVLKADINFLILCDXTOBXZAVZAIWAZEHIPAXCXENXLNZCANSPLCBNSGYBDDGNSGYBDXTNECYCDAKVRCVPUXKAZIVCYCMZNSRQAKRKDHAXTVESNEAVAIPACXTBNIAQBNBAKXTVXDAQGXTXAIPCSQBOELARVXOCXGKXAEDTIAZKTCIKDDLBRGHGTTYAXBQFANOELDBDKVAXTAZRBAZAVCAMCNOSCAVZLXTBRHKXTATCBAXLNVZDTIPNOEYAZKVCUUENSGYBDAZBRIPXZXTXSXADBDAAZAHCIRQHAXTSCCYNDHAVAVNLWGTAZIKQRAZBRIPXZNBGZNOTYLTCIADHAXTGAELZBBDNOAKXTPCYNVENBKDAKSBDKPVDLVAKNIADGNSGYBDANLZRXHNPXKDCAELZBBDIPXABQGTIAXTAHTBAZRBUIIPKXNZRBNOELNUBPDAAZBUIPDCTAADHNIAVAXTZGDNNLZBBDATFARVCDAZKARBVAFRNECWPIAVAVTKNDVENOEZKTHADAAVRQCYNZPFAXKNIAAZKPXTCOXTBKVXDNWKDRENBRXGVEXTBRZBIPAXCSDBDTBXDTEVFHCTUWBRPDXTPULANSGYBDNOAKXTRVCQCXRVQAZVRTYAIPTKVXDCVZIPAXRQVAUIBELAOEKAQBCOLKADINFLBVIAXTYUSRRBAZEHIPACEOAHNOECIPUIPXTBGTCAEYAZEHIPTXQNXCPFNHCDATBRCIAKBQRBIPXADKLPCXNOAYVZCXNZMUHDFHQNPXIPDTNHAZKARBVAFRXKIDEOUHVXKGAXCEVNCBIWUINADNNZROAZEHIPACRBIPNOEZQNIPPULAZGDKPFAXDKXTRVCQCXAVZANSGYBDNOLDTATCEHIPCGCGENEIACKDBRHKXTLXLNRODAVAUIIPDGLTLZASRKLXLNRODKXTTNHNXEACAXDNZMVEUNNLZBBDWNEHIPCEXATKBHCXQCXAQRIPKGUIAZCASTHRVCADQRIPTXQNXCBNCVDAVIIWPVPXAXNOTYCPXTXNZBBDCIIVNUKPEOTKIPTSAXHDVBQRIPCSXLNZCANOAKXTXAVIXABDUIDANOKMEONEHYHNDAPLCDOELAPLCDOEBKRDXCEOUNRDZXQNNSCNELNBHRKRDTIPAXAZIVKPEOSTHRATFANSGYBDNOAKXTPULARVMUDARVHYHNMNRDBRCITYAXNSGYBDWNKARBVAFRRQCIEZXTBKOXLTUIWSCUKDDTVCZMAZKTHKAXIPKXNHVEXKGFPFNHCZNBQNLANSGYBDNOAZCAVAXTHALPKGXTIAXTRVCQDKVTGTAMTAZMNSGYBDVXKXDCKTVCXQXTGKXAGAUIBXSNEDEMACDIXLZBBDNUEDNANAHLONNXTACDAZEHAVAVTLALVANUEDVIAZIPAXNONAQNEHIPAXSRZBNSGYBDORPFAXCSZBBDORPKXTXANSGYBDANFAUIMCQNLZRMIKAZBRIPXZTKFQVICXIVCYNZIAXTYUSRRBNOKMTNKDAKVZCGKGRTKPQNZLRTGHGTLAVAROSCAVAVBSEHAVRODTHAXTVBACAHTBAZRBNSGYBDNOKYDCNUONLATKHUXOEHIPDCVIDICENHIDRVCWPIVXTXTANZVEPVDLVAWNEVSRROVXCXKBROASXFCVDTXOVEULTUCBIWIPBRCWPIXTRVCDNSGYBDRQHAXTVEBRCBBHCXQCXAQRIPDTNHBKQECGTGUIPXLPIWZVIPTKXTNSCNALVARKCYZLVAVXCSXATIAVIPTXZNCSZBBDNECWPIAVAVMRIPCGDTXNZBBDNOEYAYEBECTYLPUIAVIPAXSRZBEBTNILZBBDKRKDFBNBELNZVCCBIPDKBNMTSRRBZVIPTKORBZXAENLUADIAXSQNZLRTGHGTLAVARVNFKRKDHFQNHBEOXCATBKXLZBBDNOEZNZMUMLRBVAFRBSAVSTHFAXXHCPPIWNEVXTXKIDFQVIDCRODCXLZBBDNOAKXTPULAVXHNDEDAZVNZLKZMDNNDARIKXTHARTEVXTCANBZMGANEGDADKRAZKTKHNHVEVXTXTABQLAAXDAUHVXKGQNZLGAATVXDAAVTVCSCXPFACIPTXQNXCXKCYNDBEUIWNKTVEXTRVNFVGEOXCATLAORIPUIPEAXHNMNTXTBGTCAELZBBDVXCXAVGHGTKMRBHRUIBELAXAZVIZDAAVBKVINEZDZMNOEZCGKGRTEHIPKXIKNFKGQNZLABUIMEVATKNDVEVXCSBNMUDAVQAXIPCXBKHLCBYUSRRBAVXTBADANSGYBDNOLZDRAZBUIWROVINOAKVAQRZNNZGKATLANDMLQBOACXLTTXAXAZIVCOTVKDQRIPCXBKHLCBQRIPTXQNXCNOAKXTBKUNUIBSHKXTPULANSGYBDAZBRIPXZSRROLNVZDAXTXAXDOELAXKCYUYEOKTZCCGTG"
key = starting_dict
plain_text = ''
for i in range(ITERATIONS):
print(f"Starting iteration {i+1}/{ITERATIONS}")
freq_map = create_freq_map()
pred_text1 = decrypt(cipher_text, key)
score1 = bad_scoring_fn(pred_text1, freq_map)
rn1 = random.randint(0, KEY_LENGTH-1)
rn2 = random.randint(rn1-20, rn1+20)
while (rn1 == rn2 or rn2 < 0 or rn2 > KEY_LENGTH-1):
rn2 = random.randint(rn1-20, rn2+20)
swap_key_pairs(key, rn1, rn2)
pred_text2 = decrypt(cipher_text, key)
score2 = bad_scoring_fn(pred_text2, freq_map)
print(f"Score1: {score1}, Score2: {score2}")
if score2 < score1:
print("we found improvement!!")
plain_text = pred_text2
else:
swap_key_pairs(key, rn1, rn2)
plain_text = pred_text1
print(plain_text)
print(key)