在 Java 中用 XOR 加密 2 个字符串时,key[i % key.length] 是什么

When encrypting 2 Strings with XOR in Java, what is key[i % key.length]

我正在尝试理解 "encrypting" 2 个在 Java 中进行 XOR 的字符串,我找到了 pretty clear example 但我不明白他们为什么这样做:

input.charAt(i) ^ key[i % key.length]

如何在 "human readable way" 中描述 key[i % key.length],例如他们正在从输入中获取下一个聊天内容并将其与 ...?

进行异或运算

"encrypting" 与 XOR 的整个方法是:

private static String encryptDecrypt(String input) {
    char[] key = {'K', 'C', 'Q'}; //Can be any chars, and any length array
    StringBuilder output = new StringBuilder();

    for(int i = 0; i < input.length(); i++) {
        output.append((char) (input.charAt(i) ^ key[i % key.length]));
    }

    return output.toString();
}

该算法使用值列表而不是对具有相同值的每个字符进行 XOR。这样,如果您的字符串是 EE(例如),那么输出的加密字符串将包含两个不同的字符,而不是每个 E 包含相同的字符。在这种情况下,字符串将包含代码为 146 的字符。这里的想法是防止相同的字符总是用相同的值加密。

表达式 key[i % key.length] 用于 select 数组中的下一个键,并且当 i 越过该数组的末尾时将环绕到第一个键。