Vigenere暗号でエンコードするJavaプログラムを作成しましたが、暗号化は正常に機能しますが、一部の特殊なケースでは復号化は機能しません。
たとえば、プレーン テキストが 'k' でキーが 'y' の場合、暗号化テキスト 'i' ((10 + 24 = 34 % 26 = 8)) が正しく生成されます。
ただし、暗号テキストを復号化すると「i」でキーが「y」の場合、((8-24) =-16%26 = -16)) が得られます。これは正の場合でも Q になります。正しく復号化する必要がある場合10になる「k」に戻ります。
誰か助けてくれませんか?必要に応じて、さらにコードを投稿できます。
---ウィキへのリンク 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);
}
}