在 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
包含相同的字符。在这种情况下,字符串将包含代码为 14
和 6
的字符。这里的想法是防止相同的字符总是用相同的值加密。
表达式 key[i % key.length]
用于 select 数组中的下一个键,并且当 i
越过该数组的末尾时将环绕到第一个键。
我正在尝试理解 "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
包含相同的字符。在这种情况下,字符串将包含代码为 14
和 6
的字符。这里的想法是防止相同的字符总是用相同的值加密。
表达式 key[i % key.length]
用于 select 数组中的下一个键,并且当 i
越过该数组的末尾时将环绕到第一个键。