破解Playfair密码

时间:2010-05-31 15:06:19

标签: encryption

我有密文和加密程序(密钥是硬编码的)。我怎么去找钥匙?当然,加密器的可用性必须提供超越暴力的可能性。

3 个答案:

答案 0 :(得分:2)

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

以下是一些很好的起点。

  1. Wikipedia(全部阅读 - 特别是密码分析)
  2. Basic Cryptanalysis(见第7章)
  3. 第二个不是我所说的轻读,但如果你是塞浦路斯就很有趣。

答案 1 :(得分: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="")

注意:当提示输入polybius方块时,首先输入第1行,然后输入第2行等,没有空格

然后你只需删除不必要的'x's和瞧!

答案 2 :(得分: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="")

它不漂亮,但它有效