2017-10-10 123 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

得到了解决方案,感谢您的帮助。通过将单个字节转换为新字节[]来处理 –