Dans ce chiffrement César, j'obtiens la sortie incorrecte pour les majuscules. Le code est le suivant:Java César Cipher
public class CaesarCipherCaseSensitive
{
public static final String ALPHABET = "abcdefghijklmnopqrstuvwxyz";
public static String encrypt(String pt, int shiftKey)
{
String ct = "";
for (int i = 0; i < pt.length(); i++)
{
int charPosition = ALPHABET.indexOf(pt.charAt(i));
int keyVal = (shiftKey + charPosition) % 26;
char replaceVal = ALPHABET.charAt(keyVal);
ct += replaceVal;
}
return ct;
}
public static String decrypt(String ct, int shiftKey)
{
String pt = "";
for (int i = 0; i < ct.length(); i++)
{
int charPosition = ALPHABET.indexOf(ct.charAt(i));
int keyVal = (charPosition - shiftKey) % 26;
if (keyVal < 0)
{
keyVal = ALPHABET.length() + keyVal;
}
char replaceVal = ALPHABET.charAt(keyVal);
pt += replaceVal;
}
return pt;
}
public static void main(String[] args)
{
String message1 = "ABCDEFGHIJKLMOPQRSTUVWXYZ";
System.out.println(encrypt(message1, 3));
System.out.println(decrypt(encrypt(message1, 3), 3));
System.out.println(encrypt(message1.toLowerCase(),5));
System.out.println(decrypt(encrypt(message1.toLowerCase(),5),5));
}
}
La sortie ressemble à: ccccccccccccccccccccccccc zzzzzzzzzzzzzzzzzzzzzzzzz fghijklmnopqrtuvwxyzabcde abcdefghijklmopqrstuvwxyz
sortie souhaitée est: DEFGHIJKLMOPQRSTUVWXYZABC ABCDEFGHIJKLMOPQRSTUVWXYZ fghijklmnopqrtuvwxyzabcde abcdefghijklmopqrstuvwxyz
Juste un petit conseil: Je recommande fortement que vous utilisez un objet StringBuilder pour concaténer beaucoup de chaînes, au lieu de l'utilisation de l'opérateur "+ =". Cela va rendre votre code beaucoup plus efficace. – Discoverer98