2010-05-31 10 views
1

J'ai le cryptogramme et un programme de cryptage (avec la clé codée en dur). Comment pourrais-je trouver la clé? La disponibilité du chiffreur doit sûrement ouvrir des possibilités au-delà de la force brute.Cracking du cryptage Playfair

Répondre

2

Oui, sachant que l'algorithme peut aider à décoder le texte chiffré, mais seulement s'il y a une faille dans l'algorithme qui pourrait être exploitée. (les bonnes nouvelles sont Playfair a quelques défauts qui peuvent être exploités)

Voici quelques bons points de départ à lire.

  1. Wikipedia (lire tout - en particulier cryptanalyse)
  2. Basic Cryptanalysis (regardez le chapitre 7)

Le second est pas ce que je qualifierais de lecture légère, mais intéressante si vous êtes en chiffres.

0

J'ai trouvé un moyen de cinq lignes (évidemment réévaluées un peu, et il est vrai très longues lignes):

(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="") 

NB: Lorsque vous êtes invité à entrer dans le carré de Polybe, entrez d'abord la ligne 1, puis rangée 2 etc, pas d'espaces

Ensuite, vous avez juste à supprimer inutile 'x et le tour est joué!

0

Essayez:

(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="") 

Il est pas joli, mais cela fonctionne