java使用。替换密码
这是我在这个网站上的第一个问题
我想我问的问题相对简单,因为我对编码有点陌生
我想用这段代码来加密和解密字符串。到目前为止,它能够对其进行加密,但无法将其反转。我有办法解决这个问题吗
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 Ez@tnoTt' 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)
# 1 楼答案
我假设你对编程和密码学是新手
编程的想法是让计算机为你执行重复。你应该(几乎)永远不必像你那样输入列表。一个解决方案是定义一个字符集和一个具有相同长度的替换字符的字符集(可能没有空格分隔,但也可以跳过这些字符)。让计算机快速处理字符可能是个好主意,以避免重复字符或非随机性
现在,对于加密,您可以简单地从明文中提取每个字符,然后用替换字符替换它。现在将这个字符添加到密文字符串的末尾。密文字符串最初为空。所以有两个循环:一个循环获取明文中的每个字符,另一个循环获取替换字符。第二个循环需要在方法
getSubstitute(char): char
中代码中的问题是,从明文中连续检索每个字符的循环不存在。而是同时替换所有字符。首先,将所有字母
a
替换为Q
。但是后来,原来的字母Q
和新替换的a
字符都被替换为磅符号。所以加密是不可逆的——实际上,解密方法只会让情况变得更糟