我正在编写一个用于polyalphabetic cipher的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
答案 0 :(得分: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));
}
}
此时我会观察:
count
或cipherlen
或i
。循环体要么执行零次,要么执行无限次。这与你在关于大多数情况下“正常工作”的问题中所说的相矛盾。如果您提供您正在尝试在此处实施的加密过程的英文描述,以及您希望看到的内容和实际看到的内容的明确陈述,将会有所帮助。