我的解密程序运行不正常......
public static void decipherMessage() {
Scanner sc = new Scanner(in);
System.out.println("Enter keyword: ");
String decipher = sc.nextLine();
String plain = ("abcdefghijklmnopqrstuvwxyz");
String cipher = decipher + "abcdefghijklmnopqrstuvwxyz";
System.out.println("Enter enciphered message: ");
String ciphMsg = sc.nextLine();
String decipherMessage = ciphMsg.toLowerCase();
char[] chars = cipher.toCharArray();
Set<Character> charSet = new LinkedHashSet<Character>();
for (char c : chars) {
charSet.add(c);
}
StringBuilder cMap = new StringBuilder();
for (Character character : charSet) {
cMap.append(character);
StringBuilder original = cMap;
}
for (int i = 0; i < 26; i++)
{
char cipherTextChar = cMap.charAt(i);
char plainTextChar = plain.charAt(i);
decipherMessage = decipherMessage.replace(cipherTextChar,plainTextChar);
System.out.println("Deciphered message");
System.out.println(decipherMessage);
}
纯文本字母应该替换加密字母
但是当我运行它时,它只是再次提供加密的消息而不进行解密?
例如
keyword: stack
plain : abcdefghijklmnopqrstuvwxyz
cipher: stackbdefghijlmnopqruvwxyz
message: overflow
ciphered message: mvhpbimw
除了相反。 使用我上面显示的代码,它只是再次提供加密的消息而不解密任何内容。
答案 0 :(得分:0)
您的代码确实替换了字符,只是不正确(假设上面deciphMsg
和decipherMessage
的使用是拼写错误。它们应该是相同的变量。)
一个问题是,你一次只能替换一个 cypher 字符串。
例如,如果我的密码是“b”,它应该切换所有a和b,但如果我给它字符串
abababababab
首先它会用b给出
替换所有的abbbbbbbbbbbb
然后用's替换所有b:
aaaaaaaaaaaa
这不是预期的结果。
解决方案基本上归结为一次更换一个消息字符。你必须为此循环消息。您还可以使用地图来提高效率。