2015-12-05 3 views
0

Это мой первый вопрос на этом сайте.Использование .replace для cypher

Я предполагаю, что вопрос, который я задаю, относительно прост, так как я немного новичок в кодировании.

Я хочу использовать этот бит кода для шифрования и расшифровки строки. Пока он способен зашифровать его, но он не может его перевернуть. Есть ли способ исправить это?

String characterSet = "abcdefg hijklmnop qrstuv wxyz ABCDEFG HIJKLMNOP QRSTUV WXYZ 123456789 !?() @£$ ',."; 

//these are all of the characters                            that will be encrypted 
System.out.println(characterSet); 

//Encryption 
String Encrypted = characterSet; 
//lowercase letters 
Encrypted = Encrypted.replace("a", "Q"); 
Encrypted = Encrypted.replace("b", "f"); 
Encrypted = Encrypted.replace("c", "L"); 
Encrypted = Encrypted.replace("d", "a"); 
Encrypted = Encrypted.replace("e", "l"); 
Encrypted = Encrypted.replace("f", "i"); 
Encrypted = Encrypted.replace("g", "I"); 
Encrypted = Encrypted.replace("h", "p"); 
Encrypted = Encrypted.replace("i", "4"); 
Encrypted = Encrypted.replace("j", "B"); 
Encrypted = Encrypted.replace("k", "A"); 
Encrypted = Encrypted.replace("l", "9"); 
Encrypted = Encrypted.replace("m", "w"); 
Encrypted = Encrypted.replace("n", "r"); 
Encrypted = Encrypted.replace("o", "d"); 
Encrypted = Encrypted.replace("p", ")"); 
Encrypted = Encrypted.replace("q", "S"); 
Encrypted = Encrypted.replace("r", "X"); 
Encrypted = Encrypted.replace("s", "!"); 
Encrypted = Encrypted.replace("t", "m"); 
Encrypted = Encrypted.replace("u", "u"); 
Encrypted = Encrypted.replace("v", "F"); 
Encrypted = Encrypted.replace("w", "x"); 
Encrypted = Encrypted.replace("x", "N"); 
Encrypted = Encrypted.replace("y", "W"); 
Encrypted = Encrypted.replace("z", "J"); 
//uppercase letters 
Encrypted = Encrypted.replace("A", "?"); 
Encrypted = Encrypted.replace("B", "G"); 
Encrypted = Encrypted.replace("C", "j"); 
Encrypted = Encrypted.replace("D", "$"); 
Encrypted = Encrypted.replace("E", "q"); 
Encrypted = Encrypted.replace("F", "P"); 
Encrypted = Encrypted.replace("G", "7"); 
Encrypted = Encrypted.replace("H", "c"); 
Encrypted = Encrypted.replace("I", "H"); 
Encrypted = Encrypted.replace("J", "k"); 
Encrypted = Encrypted.replace("K", "("); 
Encrypted = Encrypted.replace("L", "s"); 
Encrypted = Encrypted.replace("M", ","); 
Encrypted = Encrypted.replace("N", "O"); 
Encrypted = Encrypted.replace("O", "h"); 
Encrypted = Encrypted.replace("P", "i"); 
Encrypted = Encrypted.replace("Q", "£"); 
Encrypted = Encrypted.replace("R", "C"); 
Encrypted = Encrypted.replace("S", "R"); 
Encrypted = Encrypted.replace("T", "g"); 
Encrypted = Encrypted.replace("U", "6"); 
Encrypted = Encrypted.replace("V", "Z"); 
Encrypted = Encrypted.replace("W", "y"); 
Encrypted = Encrypted.replace("X", "e"); 
Encrypted = Encrypted.replace("Y", "M"); 
Encrypted = Encrypted.replace("Z", "1"); 
//special 
Encrypted = Encrypted.replace(".", "U"); 
Encrypted = Encrypted.replace("!", "D"); 
Encrypted = Encrypted.replace("?", "v"); 
Encrypted = Encrypted.replace("(", "Y"); 
Encrypted = Encrypted.replace(")", "."); 
Encrypted = Encrypted.replace("@", "K"); 
Encrypted = Encrypted.replace("£", "b"); 
Encrypted = Encrypted.replace("$", "V"); 
Encrypted = Encrypted.replace("'", "3"); 
Encrypted = Encrypted.replace(",", "5"); 
//numbers 
Encrypted = Encrypted.replace("1", "E"); 
Encrypted = Encrypted.replace("2", "z"); 
Encrypted = Encrypted.replace("3", "@"); 
Encrypted = Encrypted.replace("4", "8"); 
Encrypted = Encrypted.replace("5", "n"); 
Encrypted = Encrypted.replace("6", "o"); 
Encrypted = Encrypted.replace("7", "T"); 
Encrypted = Encrypted.replace("8", "t"); 
Encrypted = Encrypted.replace("9", "'"); 

System.out.println(Encrypted); 

//Decryption 
String Decrypted = Encrypted; 

//lowercase letters 
Decrypted = Decrypted.replace("Q", "a"); 
Decrypted = Decrypted.replace("f", "b"); 
Decrypted = Decrypted.replace("L", "c"); 
Decrypted = Decrypted.replace("a", "d"); 
Decrypted = Decrypted.replace("l", "e"); 
Decrypted = Decrypted.replace("i", "f"); 
Decrypted = Decrypted.replace("I", "g"); 
Decrypted = Decrypted.replace("p", "h"); 
Decrypted = Decrypted.replace("4", "i"); 
Decrypted = Decrypted.replace("B", "j"); 
Decrypted = Decrypted.replace("A", "k"); 
Decrypted = Decrypted.replace("9", "l"); 
Decrypted = Decrypted.replace("w", "m"); 
Decrypted = Decrypted.replace("r", "n"); 
Decrypted = Decrypted.replace("d", "o"); 
Decrypted = Decrypted.replace(")", "P"); 
Decrypted = Decrypted.replace("S", "q"); 
Decrypted = Decrypted.replace("X", "r"); 
Decrypted = Decrypted.replace("s!","s"); 
Decrypted = Decrypted.replace("m", "t"); 
Decrypted = Decrypted.replace("u", "u"); 
Decrypted = Decrypted.replace("F", "v"); 
Decrypted = Decrypted.replace("x", "w"); 
Decrypted = Decrypted.replace("N", "x"); 
Decrypted = Decrypted.replace("W", "y"); 
Decrypted = Decrypted.replace("J", "z"); 
//uppercase letters 
Decrypted = Decrypted.replace("?", "A"); 
Decrypted = Decrypted.replace("G", "B"); 
Decrypted = Decrypted.replace("j", "C"); 
Decrypted = Decrypted.replace("$", "D"); 
Decrypted = Decrypted.replace("q", "E"); 
Decrypted = Decrypted.replace("P", "F"); 
Decrypted = Decrypted.replace("7", "G"); 
Decrypted = Decrypted.replace("c", "H"); 
Decrypted = Decrypted.replace("H", "I"); 
Decrypted = Decrypted.replace("k", "J"); 
Decrypted = Decrypted.replace("(", "K"); 
Decrypted = Decrypted.replace("s", "L"); 
Decrypted = Decrypted.replace(",", "M"); 
Decrypted = Decrypted.replace("O", "N"); 
Decrypted = Decrypted.replace("h", "O"); 
Decrypted = Decrypted.replace("i", "P"); 
Decrypted = Decrypted.replace("£", "Q"); 
Decrypted = Decrypted.replace("C", "R"); 
Decrypted = Decrypted.replace("R", "S"); 
Decrypted = Decrypted.replace("g", "T"); 
Decrypted = Decrypted.replace("6", "U"); 
Decrypted = Decrypted.replace("Z", "V"); 
Decrypted = Decrypted.replace("y", "W"); 
Decrypted = Decrypted.replace("e", "X"); 
Decrypted = Decrypted.replace("M", "Y"); 
Decrypted = Decrypted.replace("1", "Z"); 
//special 
Decrypted = Decrypted.replace("U", "."); 
Decrypted = Decrypted.replace("D", "!"); 
Decrypted = Decrypted.replace("v", "?"); 
Decrypted = Decrypted.replace("Y", "("); 
Decrypted = Decrypted.replace(".", ")"); 
Decrypted = Decrypted.replace("K", "@"); 
Decrypted = Decrypted.replace("b", "£"); 
Decrypted = Decrypted.replace("V", "$"); 
Decrypted = Decrypted.replace("3", "'"); 
Decrypted = Decrypted.replace("5", ","); 
//numbers 
Decrypted = Decrypted.replace("E", "1"); 
Decrypted = Decrypted.replace("z", "2"); 
Decrypted = Decrypted.replace("@", "3"); 
Decrypted = Decrypted.replace("8", "4"); 
Decrypted = Decrypted.replace("n", "5"); 
Decrypted = Decrypted.replace("o", "6"); 
Decrypted = Decrypted.replace("T", "7"); 
Decrypted = Decrypted.replace("t", "8"); 
Decrypted = Decrypted.replace("'", "9"); 

System.out.println(Decrypted); 

Вот что я получаю в качестве результатов:

abcdefg hijklmnop qrstuv wxyz ABCDEFG HIJKLMNOP QRSTUV WXYZ 123456789 !?() @£$ ',. 

btsa'tH .tTv'hed. ReDmui hhyk vTjVqiT cHkYsnhhi bCRgoE yeME [email protected]' DvY. KbV @nU 

£8L698I)87?9OX6) SX!8uf OOWJ ?7S$1f7 IIJ(L5OOf £SS761 WX(1 123856789 !?() 3£$ 35) 

BUILD SUCCESSFUL (total time: 2 seconds) 

ответ

0

Я предполагаю, что вы новичок в программировании и криптография.

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

Теперь для шифрования вы можете просто взять каждый символ из открытого текста, а затем заменить его на символ замены. Теперь вы добавляете этот символ в конец строки шифрованного текста. Строка зашифрованного текста изначально пуста. Таким образом, у вас есть две петли: одна петля, чтобы получить каждый символ из открытого текста и один цикл, чтобы получить символ замещения. Эта вторая петля должна быть в методе getSubstitute(char): char.

Проблемы в коде - это то, что цикл для извлечения каждого символа подряд из открытого текста не существует. Вместо этого все символы заменяются одновременно. Сначала все буквы a с Q заменены. Но позже как оригинальные буквы Q, так и вновь замененные символы a заменяются значком фунта. Таким образом, шифрование не будет обратимым - на самом деле метод дешифрования делает его еще хуже.