Код шифрования в Java - PullRequest
       1

Код шифрования в Java

2 голосов
/ 24 марта 2012

Я пытался сделать программу шифрования Vigenere на Java, и я столкнулся с некоторой проблемой с частью кода шифрования / дешифрования. Я знаю, как мне следует подходить к шифрованию / дешифрованию, но у меня возникают проблемы с введением этого в код.

Позвольте мне начать с объяснения проекта:

Для этого проекта я создаю программу шифрования (шифр Vigenere отличается от шифра цезаря тем, что Vigenere позволяет ключом быть словом, а не просто буквой или цифрой), который сначала запрашивает у пользователя, хочет ли он / она зашифровать или расшифровать сообщение. Как только пользователь делает выбор, программа запрашивает у пользователя «ключ». ключ должен быть в нижнем регистре, а слово, а не символы или цифры. Затем программа запросит у пользователя входной файл, содержащий сообщение, которое пользователь хочет расшифровать или зашифровать. После этого программа запрашивает у пользователя имя выходного файла и сохраняет расшифрованное / зашифрованное сообщение в этом файле.

Итак, скажем, сообщение «Meet at 567», ключ «кошки», и пользователь хочет зашифровать сообщение, результат должен выглядеть как «Oexl ct 567»

Метод encryptLine / decryptLine моего кода должен шифровать / дешифровать только одну строку текста. другие части моего кода будут заботиться о других строках. Для кода, который я сделал до сих пор, decryptLine совершенно неверен, сейчас я просто хочу сосредоточиться на encryptLine. Как только я это выясню, выяснить, что такое decryptLine, не должно быть так сложно. Далее в моем методе encryptLine есть комментарии к тому, что я пытаюсь сделать. Шифрование работает, просто возникают проблемы, когда он сталкивается с пробелом или символами, такими как? &% $. Я знаю, что в нем много избыточного кода, но это лучшее, что я могу придумать, так как я новичок в этом.

Заранее спасибо за помощь !!!

1 Ответ

1 голос
/ 24 марта 2012

Проблема в том, что когда вы обрабатываете позицию i в line, вы ожидаете, что сможете вычислить позицию в key на основе i.Это имеет смысл - key.charAt(i%(key.length()+1)) почти правильно (хотя на самом деле это должно быть key.charAt(i%key.length()), без +1, поскольку действительные позиции в key варьируются от 0 до key.length()-1) - но это выигралоэто не работает для вас, потому что вы хотите, чтобы определенные символы не «подсчитывали», то есть вы не хотите, чтобы они «использовали» символ в key.Таким образом, ваша позиция в key на самом деле несколько независима от i, поскольку она также зависит от того, какие символы вы уже видели в line.

Так что на самом деле вам нужно иметьсовершенно отдельный индекс, j, в пределах key.Каждый раз, когда вы обрабатываете письмо от line, вы увеличиваете j.Затем вы можете либо использовать модульный подход и написать key.charAt(j%key.length()), либо просто сбросить j в 0 каждый раз, когда это будет key.length().

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