我正在尝试做一个Vigenere密码程序,但我在解密代码部分时遇到了一些麻烦。有趣的是,我想如果我的代码的加密部分工作,解密,只会是相反的。大部分情况是这样,但只有一个小问题。解密代码错误
让我首先解释程序试图做什么: 我的整个程序是从用户那里得到一个文本文件,并且一个关键词(必须是字母和小写),并将单个字母根据关键词将该文本文件的内容分配到特定位置。对于这段代码的解密部分,我只需要解密一行代码,另一部分程序将负责保持解密,直到它到达文本文件的末尾。为简单起见,我们假设文本是“oexl”,关键是“猫”,如果解密工作,结果应该是“meet”,但是我的代码以“meeZ”结尾。
我知道怎么回事错了,但我不确定如何解决它。我尝试了各种方法,最终的结果一直在变糟。
为代码的问题部分,我试图与此替换它的if语句
Character.isLetter(文本2)& & line.charAt(I)> = 97 & & line.charAt(ⅰ )< = 122 & &的text1> = 65 & &的text1 < = 90
这并不工作。
我想出的另一个想法是if语句,它首先测试以查看文本中的原始字符是否为字母,如果是,则通过移动位置减去该字符,如果该数字少于比97(这是a的ascii值),然后将25添加到该数字以将其带到z。例如。假设原始字母是l(ascii值为108),键是s(ascii值为115,通过ascii值(97),结果18表示该字母必须移位18位)。我接下来做的是从108(l)中减去18,我得到了90.之后,我将这个数字与97相比较(小写字母a的ASCII值)由于90小于97,程序应该做的是将25加到108 ,我得到133.减去113(文本需要改变的位置数)113,我得到116,这是t的ascii值。问题是,我不太确定如何实现此代码。
非常感谢您的帮助。
if (Character.isLetter(line.charAt(i))){
int text1 = line.charAt(i) - (key.charAt(j%(key.length()))-'a');
char text2 =(char)text1;
String text3 = Character.toString(text2);
text4 += text3;
System.out.println(text4);
if (text1<= 65 || (text1 >90 && text1 <97)) {
text1 = text1 + 26;
text2 =(char)text1;
text3 = Character.toString(text2);
text4 += text3;
}
j++;
可能重复http://stackoverflow.com/questions/9853285/vigenere-cipher-program-in:D与像环路的其余部分在适合它-java) – Jeffrey 2012-03-25 16:49:06
那也是我。我正在研究我的程序的加密部分。这一个是关于解密。对于大多数部分来说,它们是相同的,但是我只用一小部分代码就有点困难。 – ScoutBlade 2012-03-25 16:54:49