Java 无法对消息进行编码和解码

Java 无法对消息进行编码和解码,java,Java,我试图通过XOR逐位运算符对消息进行编码和解码: class Search { public static void main(String[] args) { String msg = "This is a test"; String encmsg = ""; String decmsg = ""; int key = 88; System.out.print("Original

我试图通过XOR逐位运算符对消息进行编码和解码:

class Search {
   public static void main(String[] args) {
   String msg = "This is a test";
   String encmsg = "";
   String decmsg = "";
   int key = 88;
   
   System.out.print("Original message: ");
   System.out.println(msg);
   
   
   // Encode the message.
   for(int i=0; i < msg.length(); i++)
       encmsg = encmsg + (char) (encmsg.charAt(i) ^ key);
   
   System.out.print("Encoded message: ");
   System.out.println(encmsg);
   
   // Decode the message
   for(int i=0; i < msg.length(); i++)
       decmsg = decmsg + (char) (decmsg.charAt(i) ^ key);
   
   System.out.print("Decoded message: ");
   System.out.println(decmsg);
  }
} 

您将原始邮件和加密邮件弄混了。解密也是一样。例如
encmsg=encmsg+(char)(encmsg.charAt(i)^key)
应该使用
msg.charAt(i)
而不是
encmsg.charAt(i)
,因为您应该从原始字符串中提取字符,对其进行编码并添加到已编码的部分

以下是对逻辑进行编码的正确方法:

//对消息进行编码。
对于(int i=0;i
没有解释的代码转储不是有用的答案。解释你改变了什么以及为什么你改变了它。是的。刚刚修复。提示:第一次执行第一个循环时,
i
为零。第一次进入该循环时,
encmsg
的值是多少?您希望encmsg.charAt(i)做什么?请检查以下两行代码encmsg=encmsg+(char)(encmsg.charAt(i)^key);decmg=decmg+(字符)(decmg.charAt(i)^键);尝试从您试图检索单个字符的字符串中标识。
Original message: This is a test
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:48)
    at java.base/java.lang.String.charAt(String.java:711)
    at Package/Package.Search.main(Search.java:15)