在Java中用XOR加密2个字符串时,密钥[i%key.length]是多少
我试图理解Java中使用XOR“加密”2个字符串,我发现了,但我不明白他们为什么这样做:在Java中用XOR加密2个字符串时,密钥[i%key.length]是多少,java,string,encryption,xor,Java,String,Encryption,Xor,我试图理解Java中使用XOR“加密”2个字符串,我发现了,但我不明白他们为什么这样做: input.charAt(i) ^ key[i % key.length] 如何以“人类可读的方式”来描述键[i%key.length],例如,他们正在从输入端获取下一次聊天,并将其与…异或 使用XOR“加密”的整个方法是: private static String encryptDecrypt(String input) { char[] key = {'K', 'C', 'Q'}; //Ca
input.charAt(i) ^ key[i % key.length]
如何以“人类可读的方式”来描述键[i%key.length],例如,他们正在从输入端获取下一次聊天,并将其与…异或
使用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();
}
私有静态字符串加密解密(字符串输入){
char[]key={'K','C','Q'};//可以是任何字符和任何长度的数组
StringBuilder输出=新的StringBuilder();
对于(int i=0;i
该算法使用值列表,而不是对具有相同值的每个字符进行异或运算。这样,如果您的字符串是EE
(例如),那么输出的加密字符串将包含两个不同的字符,而不是每个E
都包含相同的字符。在这种情况下,字符串将包含代码为14
和6
的字符。这里的想法是防止相同的字符总是使用相同的值进行加密
表达式
key[i%key.length]
用于从数组中选择下一个键,当i
经过该数组的末尾时,它将环绕到第一个键。您特别不清楚的是什么?在java中,%
是模运算符,如果这让您感到困惑…访问键
时的模运算可确保键
(可能比输入
短)重复应用于输入
。例如,在您的情况下(其中键的长度
==3)输入[3]^key[0]
,输入[4]^key[1]
,等等。