2017-10-10 74 views
0

我想單獨在每個字節上應用xor並將它們存儲在某個特定內存位置的特定字節中。java xor在單個字節上使用byte []大小鍵

例如,我有一個字符串「0」,我將它轉換爲ASCII碼,然後需要將多個字節的鍵應用於xor上,例如「243」,結果數據必須位於單個字節中。這甚至有可能嗎?

private byte[] xorWithKey(byte[] a, byte[] key) { 
    byte[] out = new byte[a.length]; 
    for (int i = 0; i < a.length; i++) { 
     out[i] = (byte) (a[i]^key[i%key.length]); 
    } 
    return out; 
} 

現在,我使用這個代碼段採用字節數組,並返回一個字節數組,這是工作的罰款,但我想做到這一點上的一個字節,如:

private byte xorWithKey(byte a, byte[] key) 
+0

沒有'i'你一樣好該密鑰進行加密的輸入byte您可以使用下面的方法可以有一個單獨的字節'key [0]^...^key [key.length -1]'。 –

回答

0

你有一系列密鑰,並且可以根據您選擇從陣列中選擇密鑰的方式,使用許多密鑰來加密輸入byte

,如果你想與所有在場的數組,其中加密功能使用所有的密鑰進行加密,採取異或反覆

private byte xorWithKey(byte a, byte[] key) { 
byte out=a; 
for (int i = 0; i < key.length; i++) { 
    out = (byte) (out^key[i]); 
} 
return out; 
} 
+0

感謝您的回覆,我使用了這種方法,但我現在遇到的問題是: 以前用xorWithKeyFunction中的一個字節數組作爲輸入,我很容易找回ASCII值,然後將其轉換回UTF-8。但是現在我得到了ASCII值,但是當我嘗試將其轉換回UTF-8以獲得輸入值「0」時,它仍然返回ASCII值「48」 任何解決方案?由於Byte.toString()不接受字符集參數,並且新的String()不會將從異或返回的單個字節作爲輸入,它需要一個字節數組。 –

+0

得到了解決方案,感謝您的幫助。通過將單個字節轉換爲新字節[]來處理 –