维吉尼亚无密钥解密
为方便破解,把破解密码分成4个文件进行执行,分别为Vigenère.py,kasiski.py,keycrack.py,decipher.py。
Vigenère.py
from kasiski import kasiski
from keycrack import keycrack
from decipher import decipher
def main():
kasiski()
keycrack()
decipher()
if __name__ == '__main__':
main()
这个文件主要是进行调用其他三个部分的破解环节,便于修改。
kasiski.py
原本按照卡西斯基的算法思想写了一个脚本,通过查找重复字段
如下脚本:
# -*- coding: utf-8 -*-
from string import find
'如果重复字段差有公因子,则输出公因子列表。若无,输出一个二维列表,每维第一个元素表示重复字段差的因子,第二个元素表示拥有此因子的字段差总数。'
def GCD(step):
gcd_list=[]
buf=[]
if not len(step):
return "None has ben found"
else:#find GCD
step_min=max(step)/2
for con in xrange(2,step_min+1):
flag=True
for each_step in step:
if each_step%con:
flag=False
break
if flag:
gcd_list.append(con)
if len(gcd_list):
return gcd_list
else:#find GCD list
for con in xrange(2,step_min+1):
gcd_list.append([con,len(step)])
for each_step in step:
if each_step%con:
gcd_list[con-2][1]-=1