#-*-coding:utf-8-*- fromSysImportStdoutmiwen="Kccpkbgufdphqtyavinrrtmvgrkdnbvfdetdgiltxrgud Dkotfmbpvgegltgckqracqcwdnawcrxizakftlewrptycqkyvxchkftponcqqrhjvajuwetmcmspkqdyhjvdahctrlsvskcgczqqdzxgsfrlswcwsjtbhafsi Asprjahkjrjumvgkmitzhfpdispzlvlgwtfplkkebdpgcebshctjrwxbafspezqnrwxcvycgaonwddkackawbbikftiovkcgghjvlnhiffsqesvyclacnvrwb Birepbbvfexoscdygzwpfdtkfqiy cwhjvlnhiqibtkhjvnpist"Ix= 0.065ZIRANPINLV=[0.081,0.014,0.038,0.039,0.122,0.022,0.017,0.045,0.071,0.001,0.004,0.037,0.034,0.070,0.072,0.028,0.000,0.068,0.063,0.094 , 0.025,0.010,0.015,0.002,0.015,0.000]PrintZiranpinlv.__len__() Huifufenzu=[]huifupianduan=""defKeylength (miwen):#calculate secret key lengthMiwen = Miwen.replace (" ","")#Replace the spaces in the ciphertextChushimiwenlen = Miwen.__len__() Fenzumiwenlen=Chushimiwenlen left=0 right=0 MAX_PINLV=0 Key_len=0 forIinchRange (2,8):#install key different lengths to group while0!= (fenzumiwenlen%i): Fenzumiwenlen=fenzumiwenlen-1Jianju=I right=I fenzu=[] while(right<=fenzumiwenlen): fenzu.append (miwen[left:right]) left= right Right= right+Jianju left=0 right=0 Jianju=0 mm="" forMinchRange (1, Chushimiwenlen-fenzumiwenlen + 1): mm= miwen[-m] +mm Fenzu.append (mm) fenzumiwenlen=Chushimiwenlen mm=""Xinfenzu= [] forQinchrange (i): Xinfenzu.append ("") forWinchRange (i): forYinchRange (FENZU.__len__()): ifFenzu[y].__len__() >= w+1: xinfenzu[w]= xinfenzu[w]+fenzu[y][w] PINLV= [] forPpinchRange (XINFENZU.__len__()): pinlv.append (0) fenzupinlv=[] FENZUPINLV=JISUANPINLV (xinfenzu,fenzupinlv) forPppinchRange (XINFENZU.__len__()): forPpppinchRange (ppp*26, (ppp+1) *26): pinlv[ppp]= Round (pinlv[ppp]+ fenzupinlv[pppp]*fenzupinlv[pppp],3) Pingjun=0 forOoinchRange (pinlv.__len__()): Pingjun= Pingjun +pinlv[oo] Pingjun= Round (pingjun/pinlv.__len__(), 5) ifPingjun >MAX_PINLV:MAX_PINLV=Pingjun Key_len= Pinlv.__len__() Decrypt (miwen,chushimiwenlen,key_len)defJISUANPINLV (xinfenzu,fenzupinlv):# forLinchRange (XINFENZU.__len__()): forAinchRange (65, 91): Zimuchuxiancishu=0 forZimuinchxinfenzu[l]:ifChr (a) = =Zimu:zimuchuxiancishu= Zimuchuxiancishu + 1fenzupinlv.append (round (float (zimuchuxiancishu)/float (xinfenzu[l].__len__()), 3)) returnFENZUPINLVdefDecrypt (miwen,chushimiwenlen,key_len): i= Key_len#to groupXinfenzu =[] Fenzumiwenlen=Chushimiwenlen while0!= (fenzumiwenlen%i): Fenzumiwenlen-= 1Jianju=I right=I fenzu=[] left=0 while(right<=fenzumiwenlen): fenzu.append (miwen[left:right]) left= right Right= right+Jianju mm="" forMinchRange (1, Chushimiwenlen-fenzumiwenlen + 1): mm= miwen[-m] +mm Fenzu.append (mm) fenzumiwenlen=Chushimiwenlen Xinfenzu= [] forQinchrange (i): Xinfenzu.append ("") forWinchRange (i): forYinchRange (FENZU.__len__()): ifFenzu[y].__len__() >= w+1: xinfenzu[w]= xinfenzu[w]+fenzu[y][w]PrintXinfenzu plaintext (xinfenzu)defplaintext (xinfenzu): FENZUPINLV= [] forLinchRange (XINFENZU.__len__()): forAinchRange (65, 91): Zimuchuxiancishu=0 forZimuinchxinfenzu[l]:ifChr (a) = =Zimu:zimuchuxiancishu= Zimuchuxiancishu + 1fenzupinlv.append (round (float (zimuchuxiancishu)/float (xinfenzu[l].__len__()), 3)) k= Shift (fenzupinlv[l*26: (l+1) *26]) Mingwenpianduan=Shuchumingwen (xinfenzu[l],k)GlobalHuifufenzu huifufenzu.append (mingwenpianduan)PrintHuifufenzu Huifu ()defshift (fenzupinlv): Mg=0 Max_k=0 Fenzu_k= [] forIinchRange (26): forJinchRange (26): Mg= Mg + round (fenzupinlv[(j+i)%26]*ziranpinlv[j],3) fenzu_k.append (round (Mg,3)) Mg=0returnfenzu_k.index (max (fenzu_k))defShuchumingwen (xinfenzu,k):GlobalHuifupianduan Huifupianduan="" forhhinchRange (XINFENZU.__len__()): ifOrd (xinfenzu[hh])-k>=65: Huifupianduan= Huifupianduan + CHR (ord (xinfenzu[hh))-k)ifOrd (xinfenzu[hh])-k<65: Huifupianduan= Huifupianduan + CHR ((ord (xinfenzu[hh]) -65-k)%91) returnHuifupianduandefHuifu ():GlobalHuifufenzu Mingwen="" forIinchRange (HUIFUFENZU.__len__()): ifi = =0:mingwen= Mingwen + huifufenzu[i][:56] Else: Mingwen= Mingwen +huifufenzu[i] forKinchRange (56): forJinchRange (k,mingwen.__len__(), 56): stdout.write (mingwen[j]) stdout.write (huifufenzu[0][-1:]) Keylength (miwen)
Python realizes Virginia decryption