Java 无法对消息进行编码和解码
我试图通过XOR逐位运算符对消息进行编码和解码: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
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)