2012-12-02 2 views
1

Я пишу программу для Vigenere Cipher. Но я не знаю, как сделать мой ключевой повтор до конца моего обычного текста. Прямо сейчас, что мой код делает, шифруются только буквы, которые эквивалентны числу букв, которые имеет мой ключ. Например, я вводил ключ «собака», и мой простой текст «catdog», он дает мне зашифрованный текст «fozdyw». Это означает, что он шифрует только первые три буквы.Как закодировать мой ключ в Vigenere Cipher

Это немного моего кода, который делает шифрование:

for (int j=0, k=0; j < strlen(text); j++, k++) 
     {   
     if((text[j] >= 'A') && (text[j] <= 'Z')) 
      text[j] = ((text[j] -'A') + key[k]) % 26 +'A'; 

     if((text[j] >= 'a') && (text[j] <= 'z')) 
      text[j] = ((text[j] -'a') + key[k]) % 26 +'a'; 

     printf("%c", text[j]); 
     } 

Что я делаю неправильно? И что должно быть правильно?

+0

Ну ... вы, кажется, знаете о модуле оператора. Подумайте об использовании этого для этого тоже ... – dmckee

ответ

2

Когда вы дойдете до конца ключа, вернитесь к индексу 0, это делается с помощью остатка от деления на размер ключа (AKA модуля):

for (int j=0, k=0; j < strlen(text); j++, k++) 
    {   
    if((text[j] >= 'A') && (text[j] <= 'Z')) 
     text[j] = ((text[j] -'A') + key[k % size_of_the_key]) % 26 +'A'; 

    if((text[j] >= 'a') && (text[j] <= 'z')) 
     text[j] = ((text[j] -'a') + key[k % size_of_the_key]) % 26 +'a'; 

    printf("%c", text[j]); 
    } 
+0

Спасибо Binyamin Sharet. Это сработало. Еще один вопрос, если вы не возражаете. Я хочу, чтобы мой код игнорировал пробелы и символы. Любое предложение, как я это сделаю? Благодарю. –

+0

Это зависит от того, что вы хотите с ними делать. если вы хотите удалить их из зашифрованной полезной нагрузки, вы можете добавить индекс туда, где вы указываете «текст», и не увеличивайте его при достижении такого символа. Но вам все равно придется обрабатывать индекс ключа, а не увеличивать его, когда вы достигаете такой буквы. – MByD

0

в формате ASCII таблица является хорошей ссылкой для этого. то есть предотвращение шифрования символов. если быть точным, endavour для работы с определенным диапазоном писем. например, между 65 и 90 для заглавных букв завершают эту программу.