使用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运算符进行编码。因此,您应该坚持使用该运算符进行解码。