# -*-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. 论文学习:Fully Convolutional Networks for Semantic Segmentation

    发表于2015年这篇<Fully Convolutional Networks for Semantic Segmentation>在图像语义分割领域举足轻重. 1 CNN 与 FCN 通 ...

  2. 网络游戏开发-服务器(01)Asp.Net Core中的websocket,并封装一个简单的中间件

    先拉开MSDN的文档,大致读一遍 (https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/websockets) WebSocket 是一 ...

  3. sdk安装

    转自:https://www.cnblogs.com/smyhvae/p/4390905.html   安装sdk:(包解压到哪里就是sdk的安装目录 P.S.安装目录不能有空格,要是之前有空格换了目 ...

  4. 很简单的Java断点续传实现原理

    原理解析 在开发当中,"断点续传"这种功能很实用和常见,听上去也是比较有"逼格"的感觉.所以通常我们都有兴趣去研究研究这种功能是如何实现的? 以Java来说,网 ...

  5. MyBatis笔试题

    1请写出Mybatis核心配置文件MyBatis-config.xml的内容? <?xml version="1.0" encoding="UTF-8"? ...

  6. java-StringBuffer学习笔记

    字符串是敞亮,它们的值在创建之后不能更改字符串的内容一旦发生了变化,那么马上回创建一个新的对象 public class Demo1{ public static void main(String[] ...

  7. linux 目录详解

    /bin bin是binary的缩写.这个目录沿袭了UNIX系统的结构,存放着使用者最经常使用的命令.例如cp.ls.cat,等等. /boot 这里存放的是启动Linux时使用的一些核心文件. /d ...

  8. 一步步教你开发、部署第一个去中心化应用(Dapp) - 宠物商店

    今天我们来编写一个完整的去中心化(区块链)应用(Dapps), 本文可以和编写智能合约结合起来看. 写在前面 阅读本文前,你应该对以太坊.智能合约有所了解,如果你还不了解,建议你先看以太坊是什么除此之 ...

  9. The Problems of Mysql Installation

    1.mysql启动报错 解决:查看相关路径的配置文件的basedir.datadir等路径是否正确. 解决:查看报错路径下是否有文件,若没有可找相应文件做软链接,或者/etc/my.cnf部分路径配置 ...

  10. 解决 python 中,时间日期不能序列化的问题

    在python 中, 你在数据库娶到了数据中如果含有时间日期,那么你在向前端作为json对象传递的时候呢,就会报错.大致如下: TypeError: datetime.datetime(2017, 1 ...