Comment coder le cryptage César: une introduction au cryptage de base

Le César Cipher est une implémentation célèbre du cryptage précoce. Il faudrait une phrase et la réorganiser en fonction d'une clé qui est édictée sur l'alphabet. Prenez, par exemple, une clé de 3 et la phrase «J'aime porter des chapeaux».

Lorsque cette phrase est chiffrée à l'aide d'une clé de 3, elle devient:

L olnh wr zhdu kdwv.

Cela rend la lecture difficile et permet aux messages d'être transmis sans être détectés.

Bien qu'il s'agisse d'un exemple très simple de cryptage, c'est un projet parfait pour quelqu'un qui apprend à coder pour s'entraîner.

Comprendre le chiffrement

Pour implémenter ce code, au moins en JAVA, vous devez réfléchir à ce qui est réellement fait. Alors, regardons les étapes nécessaires pour coder cela.

Étape 1: Identifiez le caractère dans la phrase.

Étape 2: Trouvez l'emplacement de ce personnage dans l'alphabet.

Étape 3: Identifiez l'emplacement de ces caractères + la clé dans l'alphabet.

Remarque * si l'emplacement + touche> 26, faites une boucle et commencez à compter à un.

Étape 4: Construisez une nouvelle phrase en utilisant les nouveaux caractères à la place des caractères d'origine.

Étape 5: répétez jusqu'à ce que la longueur de la phrase soit atteinte. (Boucle For).

Étape 6: retournez le résultat.

Coder le chiffre

Bien que ce soient de très bonnes étapes à suivre, nous devrions penser à ce que nous aurions besoin de faire dans le code.

Étape 0: Établissez une fonction qui lit un message et une clé.

Quelque chose comme ça:

public String Encrypt(String message, int key) {
}

Étape 1: Identifiez le caractère dans la phrase.

Pour ce faire, nous devrons établir un alphabet à regarder.

Établissez un «alphabet» variable composé des 26 lettres de l'alphabet.

String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";String alphabet2 = alphabet.toLowerCase();

Étape 2: Trouvez l'emplacement de ce personnage dans l'alphabet.

Créez ensuite une boucle for qui traverse chaque caractère du message. Ce sera plus facile de le faire si nous établissons un StringBuilder.

StringBuilder encrypted = new StringBuilder(message);
for (int q = 0; q < encrypted.length(); q++) { char currchar = encrypted.charAt(q); int index = alphabet.indexOf(currchar);}

À ce stade, nous devons nous assurer que le spot est une lettre.

if (index != -1) {
} 

Étape 3: Identifiez l'emplacement de ce caractère + la clé dans l'alphabet.

S'il s'agit d'une lettre, nous devons trouver la place dans l'alphabet modifié. Nous n'avons pas encore établi de variable alphabétique modifiée, nous devrions donc le faire maintenant.

Étape 4: Construisez une nouvelle phrase en utilisant les nouveaux caractères à la place des caractères d'origine.

Une fois que nous avons trouvé la valeur dans l'alphabet modifié, nous devons la définir au même emplacement dans le StringBuilder que nous avons créé.

public String Encryption(String input, int key){ StringBuilder encrypted = new StringBuilder(input); String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; String alphabet2 = alphabet.toLowerCase(); String keyedalphabet = alphabet.substring(key) + alphabet.substring(0, key);for (int q = 0; q < encrypted.length(); q++) { char currChar = encrypted.charAt(q); int index = alphabet.indexOf(currChar); if (index != -1) { char newChar = keyedalphabet.charAt(index); encrypted.setCharAt(q, newChar); }

Étape 5: répétez jusqu'à ce que la longueur de la phrase soit atteinte. (Pour la boucle)

Maintenant, nous avons vérifié si le caractère est en majuscule, mais nous devons également vérifier si le caractère est en minuscule. Pour ce faire, nous devons accéder à alphabet2 que nous avons établi précédemment.

index = alphabet2.indexOf(currChar); if (index != -1) { String keyedalphabet2 = keyedalphabet.toLowerCase(); char newChar = keyedalphabet2.charAt(index); encrypted.setCharAt(q, newChar); }

Étape 6: retournez le résultat.

Maintenant, nous avons terminé la boucle For. Il ne nous reste plus qu'à le quitter et à renvoyer la chaîne.

public String Encryption(String input, int key){ StringBuilder encrypted = new StringBuilder(input); String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; String alphabet2 = alphabet.toLowerCase(); String keyedalphabet = alphabet.substring(key) + alphabet.substring(0, key); for (int q = 0; q < encrypted.length(); q++) { char currChar = encrypted.charAt(q); int index = alphabet.indexOf(currChar); if (index != -1) { char newChar = keyedalphabet.charAt(index); encrypted.setCharAt(q, newChar); } index = alphabet2.indexOf(currChar); if (index != -1) { String keyedalphabet2 = keyedalphabet.toLowerCase(); char newChar = keyedalphabet2.charAt(index); encrypted.setCharAt(q, newChar); } } return encrypted }

Étape 7: débogage.

Mais attendez! Cela ne fonctionnera pas! encrypted n'est pas une chaîne, c'est un StringBuilder et cette fonction nécessite spécifiquement qu'une chaîne soit renvoyée!

Heureusement, il existe une fonction très simple pour remédier à cet oubli.

public String Encryption(String input, int key){ StringBuilder encrypted = new StringBuilder(input); String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; String alphabet2 = alphabet.toLowerCase(); String keyedalphabet = alphabet.substring(key) + alphabet.substring(0, key); for (int q = 0; q < encrypted.length(); q++) { char currChar = encrypted.charAt(q); int index = alphabet.indexOf(currChar); if (index != -1) { char newChar = keyedalphabet.charAt(index); encrypted.setCharAt(q, newChar); } index = alphabet2.indexOf(currChar); if (index != -1) { String keyedalphabet2 = keyedalphabet.toLowerCase(); char newChar = keyedalphabet2.charAt(index); encrypted.setCharAt(q, newChar); } } return encrypted.toString(); }

C'est ainsi que vous obtenez la version cryptée de votre phrase originale. Essayez-le par vous-même!

Merci pour la lecture!