Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中用XOR加密2个字符串时,密钥[i%key.length]是多少_Java_String_Encryption_Xor - Fatal编程技术网

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

在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

我试图理解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'}; //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]
,等等。