我正在嘗試做一個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