Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.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 解释代码正在做什么_Java_Encryption - Fatal编程技术网

Java 解释代码正在做什么

Java 解释代码正在做什么,java,encryption,Java,Encryption,有人能告诉我这两行是做什么的吗?结果行和它后面的那一行,我需要解释一下这两行。我不明白。从互联网上得到的 这是完整的代码 static String vigencrypt(String plain, final String key) { String result = ""; plain = plain.toUpperCase(); int length = plain.length(); for (int i = 0, j = 0; i < lengt

有人能告诉我这两行是做什么的吗?结果行和它后面的那一行,我需要解释一下这两行。我不明白。从互联网上得到的

这是完整的代码

static String vigencrypt(String plain, final String key) 
{
    String result = "";
    plain = plain.toUpperCase();
    int length = plain.length();
    for (int i = 0, j = 0; i < length; i++)
    {
        char chr = plain.charAt(i);
        if (chr < 'A' || chr > 'Z') continue;
        result = result +(char)((chr + key.charAt(j) - 2 * 'A') % 26 + 'A');
        j = ++j % key.length();
    }
    return result;
}

让我们一行一行地看一下:

result = result + // Concatenate the current string in result with
(char)((chr + key.charAt(j) - 2 * (65)) % 26 + 'A'); // this guy
让我们分解这一部分,首先将A转换为65的十进制表示形式。这些操作将把字符转换为整数-请参见:

变成

(char)((plain.charAt(i) + key.charAt(j) - 130) % 26 + 65);
因此,它将当前纯文本字符的值与当前关键字符的值相加。假设角色都是z-这给了我们

(char)((z + z - 130) % 26 + 65)
现在用十进制表示法替换Z

(char)((122 + 122 - 130) % 26 + 65)
(char)(114 % 26 + 65)
(char)(10 + 65)
(char)(75)
'K'
如果它恰好又是字母范围“A”==65的另一端呢

其他字符组合将编码为其他字符

(char)(('z' + 'A' - 130) % 26 + 65)
(char)((122 + 65 - 130) % 26 + 65)
(char)(57 % 26 + 65)
(char)(5 + 65)
(char)(70)
'F'
因此,讨论的第一行是将索引i处的下一个纯文本字符添加到索引j处的下一个键字符,如果纯文本多于键字符,则循环。它减去130,我不知道为什么-也许是为了确保它在标准的AsciCode页面上,然后进行模26和加65,以确保它将从a-Z输出一个字符,仅大写。此结果将附加到以前的结果

至于第二行,我们在这里确定下一个关键字符的索引。它将向上移动一个字符,而模确保索引将循环回起始位置,而不是超出键长度。这可能更容易被认为是

j = (1 + j);
if (j >= key.length()) {
    j = 0;
}

把这些句子分成几行,试着这样翻译。请告诉我们您不了解的部分。还要注意,'A'==65%是模-仅供注意。请说得更具体些——这些行的功能完全相同。你可以通过使用标点符号和正确的语法来帮助助手。
(char)((65 + 65 - 130) % 26 + 65)
(char)(0 % 26 + 65)
(char)(0 + 65)
(char)(65)
'A'
(char)(('z' + 'A' - 130) % 26 + 65)
(char)((122 + 65 - 130) % 26 + 65)
(char)(57 % 26 + 65)
(char)(5 + 65)
(char)(70)
'F'
j = (1 + j);
if (j >= key.length()) {
    j = 0;
}