2013-02-18 47 views
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)); 
    } 
} 

其正常工作了所有的情況下,當它遇到的值以外,假設密文是一個那麼我減去65,在這種情況下,它給一些虛擬的價值。

你能幫我確定問題是什麼嗎?

AAAD是關鍵和NIFQFWBACP是密文,則生成的明文是MHEMEVA=BO

+0

請有人幫忙.. – user1495220 2013-02-18 03:12:25

回答

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)); 
    } 
} 

在這一點上,我會觀察:

  • 我無法從你的代碼辨別你試圖做。這根本沒有意義。
  • 你實際上在做什麼出現乍一看不是可逆加密。
  • 我不知道你在這方面的意思是「虛擬價值」。
  • 由於您不更改countcipherleni。循環體要麼執行零次,要麼執行無限次數。這與您在關於大多數情況下「正常工作」的問題中所說的內容相矛盾。

這將幫助,如果你在你正試圖在這裏實現加密過程的英文提供說明,與你實際看到的你希望看到什麼明確的說法一起。

+0

非常感謝你..我得到了我的問題,我正在使用錯誤的計數器... – user1495220 2013-02-18 03:18:50