Java XOR Crypt与Linux&;窗口不同

Java XOR Crypt与Linux&;窗口不同,java,linux,windows,encryption,Java,Linux,Windows,Encryption,目前我正在用XOR加密编程聊天。但是今天我遇到了一个问题。加密在Windows下与在Linux下不同。在Linux下,聊天正常运行,但在Windows下则不正常 这节课: class XOR_c { private boolean active = true; private int key; // Constructor public XOR_c(int k){ if (System.getProperty("os.name").contain

目前我正在用XOR加密编程聊天。但是今天我遇到了一个问题。加密在Windows下与在Linux下不同。在Linux下,聊天正常运行,但在Windows下则不正常

这节课:

class XOR_c {
    private boolean active = true;
    private int key;

    // Constructor
    public XOR_c(int k){
        if (System.getProperty("os.name").contains("Windows")) {
            JOptionPane.showMessageDialog(null,"No encryption!","Client", JOptionPane.CANCEL_OPTION);
            this.active = false;
        }

        key = k;
    }

    public String encode(String s) {
        if (active == false) return s;

        char[] c = s.toCharArray();
        for (int i=0; i<c.length; i++)
            c[i] = (char)(c[i]^key);

        return new String(c);
    }

    public String decode(String s){
        return encode(s);
    }


}
类异或c{ private boolean active=true; 私钥; //建造师 公共异或c(整数k){ 如果(System.getProperty(“os.name”).包含(“Windows”)){ showMessageDialog(null,“无加密!”,“客户端”,JOptionPane.CANCEL\u选项); this.active=false; } key=k; } 公共字符串编码(字符串s){ if(active==false)返回s; char[]c=s.toCharArray();
对于(inti=0;i我想这是一个编码问题:windows和linux上的字符集可能不同

byte[] bytes = s.getBytes(charset);
...
return new String(bytes, charset)

,其中
charset
是一些显式的字符集。

System.getProperty(“os.name”).contains(“Windows”)
在Windows计算机上是正确的,因此它会显式禁用您的加密。您是否有其他代码删除此代码路径或使用其他方法?使用xor加密就像没有加密一样。您知道吗?您能否举例说明Windows上出了什么问题?例如,当您使用新的xor_c(42)对“abc”进行编码时然后用同样的异或c解码,它不返回“abc”吗?@Makoto:这是我目前试图修复Windows上的错误。此命令的行为是明确的。卢卡·拉恩:当然,我知道。但这是一个学校项目,仅用于演示。user829755:在解码之前编码的字符串后,当这两个字符串都在Windows上时是正确的。但是当我在Windows上编码字符串“abc”时我想这与默认类型的
int
char
有关,但没有具体的输入和输出示例,我们永远不会知道:)在Windows和Linux中,行尾的标记也不同。Windows使用
\r\n
(0x0F 0x0C)虽然Linux只使用
\n
(0x0C)。@rossum我认为这不是问题所在,因为还原的文本看起来几乎正确。另一方面,当一种编码总是使用16位和另一种8位时,则还原的字符串看起来像垃圾。顺便说一句\r是0x0D,\n是0x0A