Странная ошибка в программе расшифровки - PullRequest
0 голосов
/ 02 февраля 2011

Я писал этот алгоритм шифрования в свое свободное время в течение нескольких дней, и я подумал, что наконец-то он заработал, но он начал работать со сбоями, когда я подчинял ему определенные символы. У меня было это настроено, чтобы выполнить замену с циклическим ключом для изменения в символах. Проблема в том, что он отключается только после перевода одного символа. Код расшифровки ниже: </p> <pre><code>import java.util.Scanner; import java.io.*; /* File CycleDeCipher.java*/ public class CycleDeCipher { public static void main(String[] args) { new CycleDeCipher(); } public CycleDeCipher() { String plainTxt; Scanner in = new Scanner(System.in); System.out.println("This program decrypts My Cyclical Substitution Algorithm. v0.2"); System.out.println("Enter a multi digit number : "); Long mainKey = new Long(in.nextLong());; System.out.print("Enter your Cipher Text message :"); in.nextLine(); plainTxt = new String(in.next()); in.nextLine(); int[] keys = longParser(mainKey); String cipherTxt=""; int j = 0; while(j < plainTxt.length()) { cipherTxt+=decryptCharacter(plainTxt.charAt(j),keys[j%4]); j++; System.out.println("char number " + j + " successfully translated!"); } System.out.println("Your text is translated to :"+cipherTxt.toUpperCase()); } private String decryptCharacter(Character ch, int key) { System.out.println("Decrypting character "+ch.toString() + " with key "+key); if(Character.isLetter(ch)){ ch = (char) ((int) Character.toLowerCase(ch) - key%10); } else { ch = (char) ((int) ch-key%10); } return(ch.toString()); } public int[] longParser(Long key) { System.out.println("Parsing long to crypto keys..."); int i = 0; int[] result; String sInput = new String(key.toString()); char[] keys = new char[sInput.length()]; for(i = 0; i < sInput.length(); i++) { keys[i] = sInput.charAt(i); } i = 0; result = new int[sInput.length()]; for(i=0; i<keys.length; i++) { result[i] = (int) keys[i]; } return result; } }

Вход, который я дал, который сломал программу, был
123089648734
в качестве ключа и
R EWW'U( AO) TP (MO! \ QAU) как зашифрованный текст. Должно выйти на
Я не хочу этого делать! `

Я просто хочу знать, может ли кто-нибудь исправить код, чтобы он не сдавался с этими ответами.

1 Ответ

0 голосов
/ 02 февраля 2011

Проблема в вашей обработке ввода, а не в вашем алгоритме. java.util.Scanner по умолчанию разграничивает токены на пробельные символы (включая пробел, являющийся вторым символом вашей входной строки). Таким образом, ваш вызов in.next () возвращает строку с одним символом ('R'), которая затем обрабатывается и возвращает один выходной символ.

Один быстрый способ исправить это - захватить введенный текст, используя Scanner.nextLine () вместо next, который получит все символы в строке (включая пробел):

System.out.print("Enter your Cipher Text message :");
in.nextLine();
plainTxt = new String(in.nextLine());
...