Взлом шифра Playfair - PullRequest
       18

Взлом шифра Playfair

1 голос
/ 31 мая 2010

У меня есть зашифрованный текст и программа шифрования (с жестко закодированным ключом). Как мне найти ключ? Конечно, наличие шифратора должно открывать возможности, выходящие за рамки грубого принуждения.

Ответы [ 3 ]

2 голосов
/ 03 июня 2010

Да, зная, что алгоритм может помочь в декодировании зашифрованного текста, но только если в алгоритме есть изъян, который можно использовать. (хорошая новость в том, что у Playfair есть некоторые недостатки, которые можно использовать)

Вот несколько хороших начальных точек для чтения.

  1. Википедия (читать все - в частности, Криптоанализ)
  2. Базовый криптоанализ (см. Главу 7)

Второй не то, что я бы назвал легким чтением, но интересно, если вы любите шифры.

0 голосов
/ 22 января 2014

Попробуйте:

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

Это не красиво, но работает

0 голосов
/ 22 января 2014

Я нашел способ в пяти строках (очевидно, немного переоценен и, по общему признанию, очень длинные строки):

(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 и т. Д., Без пробелов

Тогда вам просто нужно удалить ненужные иксы и вуаля!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...