我寫了一個Java程序,用Vigenere密碼進行編碼的加密工作正常,但解密不適用於一些特殊情況。Vigenere解密奇怪
例如,如果解密時明文是數 'k',密鑰爲 'y' 的它正確地產生密文的 'i'((10 + 24 = 34%26 = 8))
然而((8-24)= -16%26 = -16)),即使它是正值,也是Q.當它應該正確地解密回''時, k'這將是10.
任何人都可以幫助我嗎?如果需要,我可以發佈更多代碼。
---鏈接到維基Viginare加密算法http://en.wikipedia.org/wiki/Vigen%C3%A8re_cipher ---
//decryption
else{
for (int i=0; i < a.length(); i++){
for (int j=0; j < full.length(); j++){
//finding the index of the current cipher text letter
if (a.charAt(i) == full.charAt(j)){
positionP = j;
}
//finding the index of the current key letter
if(key.charAt(i)==full.charAt(j)){
positionK = j;
}
}
//using the formula for vigenere encoding it adds the newly encrypted character to the output
output = output + full.charAt((positionP - positionK)%26);
}
}
太謝謝你了!我真的被困住了,我發現好奇的是沒有任何解密Vigenere的算法提到了這個!他們通常會說:(CipherTextIndex - keyTextIndex)%26 = IndexOfPlainText 我可能會在wiki中添加一條關於此的註釋。 非常感謝你! – 2013-02-24 18:51:45
@Luke它依賴於你如何定義負數的其餘部分。見 http://stackoverflow.com/questions/4403542/how-does-java-do-modulus-calculations-with-negative-numbers – Javier 2013-02-24 18:58:09