Java XOR Crypt与Linux&;窗口不同
目前我正在用XOR加密编程聊天。但是今天我遇到了一个问题。加密在Windows下与在Linux下不同。在Linux下,聊天正常运行,但在Windows下则不正常 这节课: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
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