# -*-coding:UTF-8-*-
from sys import stdout
miwen = "KCCPKBGUFDPHQTYAVINRRTMVGRKDNBVFDETDGILTXRGUD DKOTFMBPVGEGLTGCKQRACQCWDNAWCRXIZAKFTLEWRPTYCQKYVXCHKFTPONCQQRHJVAJUWETMCMSPKQDYHJVDAHCTRLSVSKCGCZQQDZXGSFRLSWCWSJTBHAFSIASPRJAHKJRJUMVGKMITZHFPDISPZLVLGWTFPLKKEBDPGCEBSHCTJRWXBAFSPEZQNRWXCVYCGAONWDDKACKAWBBIKFTIOVKCGGHJVLNHIFFSQESVYCLACNVRWBBIREPBBVFEXOSCDYGZWPFDTKFQIY CWHJVLNHIQIBTKHJVNPIST"
Ix = 0.065
ziranpinlv=[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 fenzupinlv
def 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 huifupianduan
def 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实现维吉尼亚解密的更多相关文章

  1. Vigenère Cipher 维吉尼亚加解密算法

    维吉尼亚的加解密有两种方法. 第一种是查表:第一行为明文,第一列为密钥,剩余的为对应的密文 第二种方法是转化计算法:逐个将字符转化为从零开始的数字,对数字进行加密/解密后,再转化为字符. 本文要用c+ ...

  2. [加密]C#实现维吉尼亚加密与解密(解密前提为已知密匙)

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  3. 随机练习:C#实现维吉尼亚加密与解密(解密前提为已知密匙)

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  4. 维吉尼亚密码-攻防世界(shanghai)

    维吉尼亚密码 维吉尼亚密码是使用一系列 凯撒密码 组成密码字母表的加密算法,属于多表密码的一种简单形式. 加密原理 维吉尼亚密码的前身,是我们熟悉的凯撒密码. 凯撒密码的加密方式是依靠一张字母表中的每 ...

  5. [CTF]维吉尼亚密码(维基利亚密码)

    [CTF]维吉尼亚密码(维基利亚密码) ----------------------百度百科 https://baike.baidu.com/item/维吉尼亚密码/4905472?fr=aladdi ...

  6. python 维吉尼亚

    加密key='COMPUTER' plaintext='BLOCKCIPHERDESIGNPRINCIPLE' ascii='abcdefghijklmnopqrstuvwxyz'.upper() k ...

  7. 维吉尼亚密码java代码实现根据密钥长度计算IC值过程

    package cn.longxuzi; import java.util.Scanner; import org.junit.Test; public class ICUtils { /** * @ ...

  8. 维吉尼亚密码java完整版

    package cn.longxuzi; import org.junit.Test; public class Chi_SquareUtils { private static final ICUt ...

  9. python实现维吉利亚密码加密(Vigenère cipher)

    最近有个朋友问我关于维吉利亚密码如何用python实现加密,研究之后发现这是个挺好玩的东西,遂决定写篇博文记录一下. 一.何谓维吉利亚密码 第一列是密钥字母列,第一行是明文字母行.不难看出维吉利亚密码 ...

随机推荐

  1. 微信小程序天坑--图片汉字命名

    图片用汉字命名的,在开发者工具中是显示的,但是,在真机的微信中,是不会显示的. 大写的尴尬,微信小程序开发者工具对于做微信的UI来说,就是一个天坑,在电脑上漂漂亮亮的,到手机上各种意想不到的情况.

  2. 【Webpack的使用指南 02】Webpack的常用解决方案

    说是解决方案实际上更像是webpack的插件索引. 写这一篇的目的是为了形成一个所以,将来要用时直接来查找即可. 索引目录 1.自动构建HTML,可压缩空格,可给引用的js加版本号或随机数:html- ...

  3. eclipse集成dorado5插件

    dorado5最好使用jdk1.6 32位,与eclipse j2ee indigo版本兼容最好.其他eclipse版本貌似view编辑时按钮点击事件不生效... 现附上安装包链接(均为官方版本): ...

  4. sqlserver中压缩日志文件

    最近在转移数据,sqlserver的日志文件ldf,占用空间特别大,为了还原库,节省空间,所以压缩日志文件迫在眉睫.在网上找了一段代码: USE [master] GO ALTER DATABASE ...

  5. js复制内容到剪贴板

    我们web上的复制,有时候尽管可以用鼠标选中,然后复制,但是某些时候,文字不方便选中.因此,我们自定义一个复制按钮,然后通过点击它,把想要的内容复制到剪贴板上.我归纳总结了几种方法: 1.ZeroCl ...

  6. clientTop,scrollTop,兼容

    在开发中常见的额兼容性问题: scrollTop问题: function scroll() { // 开始封装自己的scrollTop if(window.pageYOffset != null) { ...

  7. Rotation Proposals

    Rotation Proposals 论文Arbitrary-Oriented Scene Text Detection via Rotation Proposals 这篇论文提出了一个基于Faste ...

  8. EF ( Entity Framework) 操作ArcCataLog 生成的(Sql Server)空间数据库

    因为项目需求,现在需要利用EF 操作由Arccatalog生成的sql server空间数据库..在此之前,一直没有接触过空间数据库,在操作空间数据库时 绕了许多弯... 因此写一篇随笔做一个总结. ...

  9. 设计模式——适配器模式(C++实现)

            #include <iostream> #include <string> using namespace std; class STTarget { publ ...

  10. LNMP详解

    目录 Nginx配置    1 PHP解析    1 Mysql操作    3 服务安装    3 连接测试    3 数据配置    3 Blogs建立    4   LNMP 环境 Mysql:1 ...