2010-05-31 80 views
1

我有密文和一个加密程序(密钥硬编码)。我将如何去寻找钥匙?当然,加密器的可用性必须打开超越暴力的可能性。打破Playfair密码

回答

2

是的,知道该算法可能有助于解码密码文本,但前提是算法中存在可能被利用的缺陷。 (好消息是Playfair有一些可以被利用的缺陷)

这里有几个很好的起点。

  1. Wikipedia(读这一切 - 尤其是密码分析)
  2. Basic Cryptanalysis(看第7章)

第二个是不是我所说的轻读,但有趣的,如果你是进入密码。

0

我已经找到一种方法在五线(显然重新评估了一下,固然很长的线):

(a,b,c)="".join((input("CODE: ")).split()),input("Polybius Square: "),"" 
for i in a: 
    c+=str(int(((b.find(i))-((b.find(i))%5))/5))+str((b.find(i))%5) 
for j in range(0,(int(len(c)/2))): 
    print((b[((5*(int((c[:(int(len(c)/2))])[j])))+(int((c[(int(len(c)/2)):])[j])))]).lower(),end="") 

注:当提示输入波里比阿广场,首先进入第1行,然后第2行等,没有空格

然后,你只需要删除不必要的'X和瞧!

0

尝试:

(a,b,f,g,c)="".join(input("CODE: ").split()),input("Polybius S: "),"","",1 
for(i)in(a): 
    if(c%2)==0: 
     g+=i 
    else: 
     f+=i 
    c+=1 
for(j)in(range(0,len(f))): 
    if(b.find(f[j])%5)!=(b.find(g[j])%5)and(int(((b.find(f[j]))-(b.find(f[j])%5))/5))!=(int(((b.find(g[j]))-(b.find(g[j])%5))/5)): 
     print(b[((int(((b.find(f[j]))-(b.find(f[j])%5))/5))*5)+(b.find(g[j])%5)],end="") 
     print(b[((int(((b.find(g[j]))-(b.find(g[j])%5))/5))*5)+(b.find(f[j])%5)],end="") 
    elif(b.find(f[j])%5)==(b.find(g[j])%5)and(int(((b.find(f[j]))-(b.find(f[j])%5))/5))!=(int(((b.find(g[j]))-(b.find(g[j])%5))/5)): 
     print(b[((((int(((b.find(f[j]))-(b.find(f[j])%5))/5))-1)%5)*5)+b.find(f[j])%5],end="") 
     print(b[((((int(((b.find(g[j]))-(b.find(g[j])%5))/5))-1)%5)*5)+b.find(g[j])%5],end="") 
    elif(b.find(f[j])%5)!=(b.find(g[j])%5)and(int(((b.find(f[j]))-(b.find(f[j])%5))/5))==(int(((b.find(g[j]))-(b.find(g[j])%5))/5)): 
     print(b[((int(((b.find(f[j]))-(b.find(f[j])%5))/5))*5)+((b.find(f[j])%5)-1)%5],end="") 
     print(b[((int(((b.find(g[j]))-(b.find(g[j])%5))/5))*5)+((b.find(g[j])%5)-1)%5],end="") 

这不是很漂亮,但它的工作原理