python實現維吉尼亞解密

來源:互聯網
上載者:User

標籤:asp   utf-8   for   rom   odi   inf   nbsp   dna   style   

# -*-coding:UTF-8-*-from sys import  stdoutmiwen = "KCCPKBGUFDPHQTYAVINRRTMVGRKDNBVFDETDGILTXRGUD DKOTFMBPVGEGLTGCKQRACQCWDNAWCRXIZAKFTLEWRPTYCQKYVXCHKFTPONCQQRHJVAJUWETMCMSPKQDYHJVDAHCTRLSVSKCGCZQQDZXGSFRLSWCWSJTBHAFSIASPRJAHKJRJUMVGKMITZHFPDISPZLVLGWTFPLKKEBDPGCEBSHCTJRWXBAFSPEZQNRWXCVYCGAONWDDKACKAWBBIKFTIOVKCGGHJVLNHIFFSQESVYCLACNVRWBBIREPBBVFEXOSCDYGZWPFDTKFQIY 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]print ziranpinlv.__len__()huifufenzu = []huifupianduan = ""def keylength(miwen): #計算秘鑰長度    miwen = miwen.replace(" ", "") #替換掉密文中的空格    chushimiwenlen = miwen.__len__()    fenzumiwenlen = chushimiwenlen    left = 0    right = 0    max_pinlv = 0    key_len = 0    for i in range(2,8):#安裝key不同長度進行分組        while 0!=(fenzumiwenlen%i):            fenzumiwenlen=fenzumiwenlen-1        jianju =  i        right = i        fenzu=[]        while(right<=fenzumiwenlen):            fenzu.append(miwen[left:right])            left = right            right = right+jianju        left = 0        right = 0        jianju = 0        mm = ""        for m in range(1, chushimiwenlen - fenzumiwenlen + 1):            mm = miwen[-m] + mm        fenzu.append(mm)        fenzumiwenlen = chushimiwenlen        mm = ""        xinfenzu = []        for q in range(i):            xinfenzu.append("")        for w in range(i):            for y in range(fenzu.__len__()):                if  fenzu[y].__len__()>= w+1:                    xinfenzu[w] = xinfenzu[w]+ fenzu[y][w]        pinlv = []        for pp in range(xinfenzu.__len__()):            pinlv.append(0)        fenzupinlv = []        fenzupinlv = jisuanpinlv(xinfenzu,fenzupinlv)        for ppp  in range(xinfenzu.__len__()):            for pppp in range(ppp*26,(ppp+1)*26):                pinlv[ppp] = round(pinlv[ppp]+ fenzupinlv[pppp]*fenzupinlv[pppp],3)        pingjun = 0        for oo in range(pinlv.__len__()):            pingjun = pingjun + pinlv[oo]        pingjun = round(pingjun/pinlv.__len__(),5)        if pingjun > max_pinlv:            max_pinlv = pingjun            key_len = pinlv.__len__()    decrypt(miwen,chushimiwenlen,key_len)def jisuanpinlv(xinfenzu,fenzupinlv):#    for l in range(xinfenzu.__len__()):        for a in range(65, 91):            zimuchuxiancishu = 0            for zimu in xinfenzu[l]:                if chr(a) == zimu:                    zimuchuxiancishu = zimuchuxiancishu + 1            fenzupinlv.append(round(float(zimuchuxiancishu)/float(xinfenzu[l].__len__()),3))    return fenzupinlvdef decrypt(miwen,chushimiwenlen,key_len):        i = key_len #進行分組        xinfenzu = []        fenzumiwenlen = chushimiwenlen        while 0!=(fenzumiwenlen%i):            fenzumiwenlen -= 1        jianju =  i        right = i        fenzu=[]        left = 0        while(right<=fenzumiwenlen):            fenzu.append(miwen[left:right])            left = right            right = right+jianju        mm = ""        for m in range(1, chushimiwenlen - fenzumiwenlen + 1):            mm = miwen[-m] + mm        fenzu.append(mm)        fenzumiwenlen = chushimiwenlen        xinfenzu = []        for q in range(i):            xinfenzu.append("")        for w in range(i):            for y in range(fenzu.__len__()):                if  fenzu[y].__len__()>= w+1:                    xinfenzu[w] = xinfenzu[w]+ fenzu[y][w]        print xinfenzu        plaintext(xinfenzu)def plaintext(xinfenzu):    fenzupinlv = []    for l in range(xinfenzu.__len__()):        for a in range(65, 91):            zimuchuxiancishu = 0            for zimu in xinfenzu[l]:                if chr(a) == zimu:                    zimuchuxiancishu = zimuchuxiancishu + 1            fenzupinlv.append(round(float(zimuchuxiancishu)/float(xinfenzu[l].__len__()),3))        k = shift(fenzupinlv[l*26:(l+1)*26])        mingwenpianduan = shuchumingwen(xinfenzu[l],k)        global huifufenzu        huifufenzu.append(mingwenpianduan)    print huifufenzu    huifu()def shift(fenzupinlv):    Mg = 0    max_k = 0    fenzu_k = []    for i in range(26):        for j  in range(26):            Mg = Mg + round(fenzupinlv[(j+i)%26]*ziranpinlv[j],3)        fenzu_k.append(round(Mg,3))        Mg = 0    return fenzu_k.index(max(fenzu_k))def shuchumingwen(xinfenzu,k):    global huifupianduan    huifupianduan= ""    for hh in range(xinfenzu.__len__()):            if ord(xinfenzu[hh])-k>=65:                huifupianduan = huifupianduan + chr(ord(xinfenzu[hh])-k)            if ord(xinfenzu[hh])-k<65:                huifupianduan = huifupianduan + chr((ord(xinfenzu[hh])-65-k)%91)    return huifupianduandef huifu():    global huifufenzu    mingwen = ""    for i in range(huifufenzu.__len__()):        if i == 0:            mingwen = mingwen + huifufenzu[i][:56]        else:            mingwen = mingwen +huifufenzu[i]    for k in range(56):        for j in range(k,mingwen.__len__(),56):            stdout.write(mingwen[j])    stdout.write(huifufenzu[0][-1:])keylength(miwen)

 

python實現維吉尼亞解密

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.