如何解决使用XOR编码和解码消息
我正在使用XOR编码和解码消息:
class Search {
public static void main(String arg[]) {
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) (msg.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) (encmsg.charat(i) + key);
System.out.print("Decoded message: ");
System.out.println(decmsg);
}
}
如您所见,使用同一密钥的两个XOR的结果应产生已解码的消息。 一元补码(NOT)运算符反转操作数所有位的状态。我将把输出留给您:
Original message: This is a test
Encoded message: 01+x1+x9x,=+,Decoded message: dˆ‰ƒÐ‰ƒÐ‘Є•ƒ„
预期输出:
Original message: This is a test
Encoded message: 01+x1+x9x,Decoded message: This is a test
怎么了?问题可能与ASCII码有关
解决方法
您的解码代码块中可能有错字,您只需要更改
decmsg = decmsg + (char) (encmsg.charAt(i) + key);
到
decmsg = decmsg + (char) (encmsg.charAt(i) ^ key);
输出如下:
Original message: This is a test
Encoded message: 01+x1+x9x,=+,Decoded message: This is a test
顺便说一句,我们最好在{}
代码块中使用if
,以使我们的代码更易于阅读。
在解码时,+
运算符应替换为^
。
因为您使用exclusive or运算符进行编码。因此,您应该坚持使用该运算符进行解码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。