微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用XOR编码和解码消息

如何解决使用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 举报,一经查实,本站将立刻删除。