2015-11-09 9 views
0

В последнее время я пытаюсь рассказать о том, как шифровать и расшифровывать с помощью Vigenere Cipher.Как расшифровать сообщение с использованием Vigenere Cipher

Я успешно зашифровал сообщение и эти шаги, которые я предпринимал, чтобы достичь шифрования:

Ключ шифрования: Set

сообщение: Совершенно секретно

Шаг 1: Численное представление ключа - 18, 4, 19 (Использование таблицы ниже)

enter image description here

Работа Выход:

Напоминание:

Р есть множество открытых текста единиц

С представляет собой набор зашифрованных единиц

K есть множество ключи

E: Р х К -> С является функция шифрования

D: С х К -> Р функция дешифрования

enter image description here


Plaintext: сверхсекретной

гипертекст: ISIKIVJIM


Хотя мне удалось зашифровать сообщение «совершенно секретно», я изо всех сил пытаюсь расшифровать сообщения, используя метод Vigenere Cipher, используя численный метод, который я использовал выше. Может кто-нибудь объяснить мне, как я могу расшифровать, можно сказать: ISIKIVJIM (зашифрованный текст сверху) до его исходного текстового сообщения, которое является «совершенно секретным».

Спасибо.

+0

р = с -. К модулю 26 –

+0

Я голосую, чтобы закрыть этот вопрос не по теме, потому что это не программирование связанных , Это точно по теме для crypto.stackexchange.com. –

+1

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что это не вопрос программирования. –

ответ

0

Как указано в комментариях, формула дешифрования: p = c - k mod 26, также обратите внимание, что мы должны выполнять модульную арифметику, поэтому наш ответ на любой вход должен находиться в диапазоне от 0 до 25, т. Е. Если мы получаем отрицательное число, которое мы можем добавить 26 (i.е число мы берем по модулю по) до тех пор, пока находятся в пределах этого диапазона вы можете прочитать больше об этом здесь:

https://en.wikipedia.org/wiki/Modular_arithmetic

Таким образом, расшифровка будет как:

L = 11 - 18 = - 7 мод 26 = -7 + 26 = 19 = Т

S = 18 - 4 = 14 мод 26 = 14 = О

I = 8 - 19 = -11 мод 26 = -11 + 26 = 15 = P

анс так далее ...

Я также написал c++ код: http://ideone.com/M3BAmq

0

Недавно я написал программу Java, который шифрует и расшифровывает в Виженера с использованием байтов. Вы должны преобразовать обычный текст/склеп текст в массив байтов и передать его в

public static byte [] encryptVigenere (byte [] pt, String key) 
{ 
    byte [] c_text = new byte [pt.length]; 
    byte [] key_text = key.getBytes(); 
    byte tmp; 
    int shift; 

    for (int i = 0, j = 0; i < pt.length; i++) 
    { 
     if (j >= key_text.length) 
      j = 0; 

     shift = key_text[j] - 65; //index of alphabet 
     tmp = (byte) (pt[i] + shift); 

     if (tmp > 'Z') 
      tmp = (byte) (pt[i] - (26-shift)); 

     c_text[i] = tmp; 
     j++; 
    } 
    return c_text; 
} 

public static byte [] decryptVigenere (byte [] ct, String key) 
{ 
    byte [] p_text = new byte [ct.length]; 
    byte [] key_text = key.getBytes(); 
    byte tmp; 
    int shift; 

    for (int i = 0, j = 0; i < ct.length; i++) 
    { 
     if (j >= key_text.length) 
      j = 0; 

     shift = key_text[j] - 65; //index of alphabet 
     tmp = (byte) (ct[i] - shift); 

     if (tmp < 'A') 
      tmp = (byte) (ct[i] + (26-shift)); 

     p_text[i] = tmp; 
     j++; 
    } 
    return p_text; 
}