java multiple XOR

时间:2018-02-06 09:49:52

标签: java encryption xor

我有8个字符串,每个字符串包含32位二进制字(编号从w -8 到w -1

然后,我需要根据以下公式使用这8个二进制字执行XOR运算:

w i :=(w i-8 ⊕w i-5 ⊕w i-3 ⊕w i-1 ⊕φ⊕i)<<< 11(i的范围从0到131)

前4个术语是32位二进制字(字符串)

φ= 0x9e3779b9(十六进制)

我在我的项目中使用它来创建加密的子密钥,我不知道如何一次对6个术语执行XOR操作。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您的一些要求不清楚。也许这有助于展示您可以使用的技术。

// I have 8 strings each containing 32 bit binary words (numbered from w-8 to w-1)
String [] strings = new String[] {
        "01000010101010100100001010101010",
        "01000010101010100100001010101010",
        "01000010101010100100001010101010",
        "01000010101010100100001010101010",
        "01000010101010100100001010101010",
        "01000010101010100100001010101010",
        "01000010101010100100001010101010",
        "01000010101010100100001010101010"
};
// Make Integers out of them.
List<Integer> ints = Arrays.stream(strings).map(s -> Integer.parseInt(s, 2)).collect(Collectors.toList());
// Reference specific ones by name.
Integer w8 = ints.get(7);
Integer w5 = ints.get(4);
Integer w3 = ints.get(2);
Integer w1 = ints.get(0);
int φ = 0x9e3779b9;


public void test(String[] args) {
    for ( int i = 0; i <= 131; i++ ) {
        int wi = (w8 ^ w5 ^ w3 ^ w1 ^ φ ^ i) << 11;
        System.out.println(Integer.toBinaryString(wi));
    }
}