0

我正在为多字母密码编写一个 Java 程序。我有这段代码:

while (i != 4 && count != cipherlen) {
    if ((((int) ciphertext.charAt(i)) - 65) == 0) {
        plaintext[count] = (char) (90 - (((int) keyreader.charAt(i)) - 65));
    }

    if ((((int) keyreader.charAt(i)) - 65) > (((int) ciphertext
            .charAt(i)) - 65)) {
        System.out.println("first");

        plaintext[count] = ((char) (90 - ((((int) keyreader.charAt(i)) - (65)) - (((int) ciphertext
                .charAt(i)) - 65))));
        //System.out.println(text);
    }
    else {
        //System.out.println("second");
        plaintext[count] = ((char) ((((int) ciphertext.charAt(count)) - ((int) keyreader
                .charAt(i))) + 64));
    }
}

它在所有情况下都能正常工作,除非它遇到一个值,假设密文是 A,然后我减去 65,在这种情况下它给出了一些虚拟值。

你能帮我确定问题是什么吗?

AAAD为密钥,NIFQFWBACP为密文,则生成的明文为MHEMEVA=BO

4

1 回答 1

0

在 Java 中,char是数字类型。您可以对char值进行算术运算,而无需转换为其他类型。

因此,让我们首先将您的代码翻译成具有模糊可读性的等效内容...

while (i != 4 && count != cipherlen) {
    if (ciphertext.charAt(i) == 'A') {
        plaintext[count] = 'Z' - (keyreader.charAt(i) - 'A');
    }

    if (keyreader.charAt(i) > ciphertext.charAt(i)) {
        System.out.println("first");

        plaintext[count] = 'Z' - (keyreader.charAt(i) - 'A') - 
                           (ciphertext.charAt(i) - 'A');
        //System.out.println(text);
    }
    else {
        //System.out.println("second");
        plaintext[count] = ciphertext.charAt(count) - 
                           keyreader.charAt(i) + ('A' - 1));
    }
}

在这一点上,我会观察到:

  • 我无法从您的代码中辨别出您要做什么。这根本没有意义。
  • 乍一看,您实际上在做的事情似乎不是可逆加密。
  • 在这种情况下,我不知道您所说的“虚拟值”是什么意思。
  • 因为你不改变countor cipherlenor i。循环体要么执行零次,要么执行无限次。这与您在问题中所说的关于它在大多数情况下“正常工作”的说法相矛盾。

如果您在此处提供您尝试实施的加密过程的英文描述,并清楚说明您希望看到的内容和实际看到的内容,将会有所帮助。

于 2013-02-18T03:14:33.407 回答