2013-06-11 39 views
0

當前我正在使用異或加密編程聊天。但今天我遇到了一個問題。 Windows中的加密與Linux中的不同。在Linux下,聊天正常運行,但在Windows下不行。異或用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); 
    } 


} 

這與openSUSE的,Debian和Windows 7的

現在如何解決它的測試(在這一刻我爲加密旁路但這不是我的目標,我想要兩個系統加密)?我的源錯了嗎?

+1

System.getProperty(「os.name」)。contains(「Windows」)在Windows機器上是成立的,所以它明確地禁用了你的加密。你有一些其他代碼可以刪除這段代碼或者使用其他方法嗎? – Makoto

+2

擁有xor加密就像沒有加密。你知道嗎? –

+1

你能舉一個例子,說明Windows上出了什麼問題嗎?即當你用新的XOR_c(42)編碼「abc」,然後用相同的XOR_c解碼它時,它是否不返回「abc」? – user829755

回答

2

我想這是一個編碼問題:在Windows和Linux上,charset可能會有所不同。我建議

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

,其中charset是一些明確的字符集。

+0

在Windows和Linux中,行尾也標記爲不同。 Windows使用'\ r \ n'(0x0F 0x0C),而Linux只使用'\ n'(0x0C)。 – rossum

+0

@rossum我不認爲這是問題,因爲恢復後的文本看起來幾乎是正確的。另一方面,當一個編碼總是使用16位而另一個8位時,則恢復的字符串看起來像垃圾。 btw \ r是0x0D,\ n是0x0A – user829755

相關問題