Sujet U22 algo appliquée BTS SIO : Cryptographie ROT13

La situation

Cryptographie ROT13 : une technique très employée sur Internet est ROT13 (sur des forums, ... lorsqu'il n'y a pas d'enjeu de sécurité). Son principe est de décaler de 13 places de façon circulaire (c'est à dire que si on arrive à la fin, on continue en repartant au début) le rang des lettres qui constituent le message.

Le codage d'un message consiste, pour chacun de ses caractères à :

L'objectif est de coder, puis décoder des messages, en utilisant cette technique.

Partie A - Durée : 30 minutes

Préparation sur table. L'utilisation d'un ordinateur est interdite.

On utilisera l'alphabet constitué des 26 lettres en majuscules, stocké dans un tableau de chaînes de caractères à une dimension [0. .25] nommé alphabet.

tableau crypto

Exemple : on souhaite coder le message ZEN!

Le premier caractère de ce message est le Z, situé au rang 25 du tableau alphabet. On regarde 13 cases plus loin pour trouver la lettre codée : 25+13=38, et comme la cellule de rang 38 n'existe pas, on repart au début, ce qui donne la cellule de rang 38-26=12, correspondant à la lettre M. On procède de même pour les caractères suivants E et N , qui sont codés. Le caractère ! n'est pas trouvé dans le tableau alphabet, donc reste identique.

Le message ZEN! est donc codé MRA! .

On donne ci-dessous un algorithme partiel, qui sera à compléter au fil des questions suivantes.

Fonction codage(message)
PARAMÈTRE	message	: chaîne de caractères
TYPE RENVOYE chaîne de caractères
ROLE	code le message comme indiqué (ROT13)
VARIABLES	:  ...
longueur ← longueur(message)
messageCode ← ""
Pour i allant de ... à ...
  rang ← ... //rang est l'indice de la lettre dans l'alphabet ou -1
  Si rang = -1
     ....
  Sinon
    rangCode  ← ...     //rangCode est l'indice de la lettre codée dans alphabet
    lettreCode	← ...  //lettreCode est la lettre codée
    ...
  FinSi 
FinPour 
Retourner messageCode
FinFonction
# ALGORITHME PRINCIPAL ROT13 
alphabet ← ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
message	← saisir(« Saisir le message »)
messageCode	← codage(message)
Afficher(messageCode)
// Afficher(decodage(messageCode))
FIN

A-1 Utiliser la méthode décrite précédemment pour coder le message A2MAIN

A-2 Écrire l'algorithme de la fonction trouveLettre(lettre) prenant pour paramètre d'entrée un caractère lettre, et renvoyant un entier : l'indice de ce caractère dans le tableau alphabet, s'il y est trouvé, ou la valeur -1 sinon.

A-3 Compléter l'algorithme de la fonction codage(message) prenant pour paramètre d'entrée une chaîne de caractères message, et renvoyant une chaîne de caractères correspondant au message codé.

A-4 Expliquer le rôle de la fonction mystère(message) dont l'algorithme est donné ci-dessous.

Fonction mystère(message)
PARAMÈTRE message	: chaîne de caractères
TYPE RENVOYE entier
ROLE
VARIABLES	longueur, nb, i	: entiers
    longueur ← longueur(message)
    nb ← 0
    Pour i allant de 0 à longueur-1
       Si trouveLettre(message[i]) = -1
             nb ← nb + 1
       FinSi 
    FinPour 
    Retourner nb
FinFonction

A-5 On considère la fonction decodage(message) prenant pour paramètre d'entrée une chaîne de caractères message, correspondant à un message codé et renvoyant une chaîne de caractères correspondant au message décodé. Coder le message 'MRA'. Que peut-on en déduire pour la fonction decodage(message) ?

A-6 QUESTION BONUS : Modifier l'algorithme principal de façon à demander à l'utilisateur de saisir un nouveau message à coder jusqu'à ce qu'il saisisse un message ne contenant que des lettres de l'alphabet écrites en majuscules ; on se limitera à 10 saisies au maximum.

Partie B - Durée 30 minutes

Préparation sur machine. Votre fichier est à enregistrer sous le nom VOTRENOM. extension correspondant.

B-1 Implémenter en Python, ou dans le langage de votre choix, l'algorithme des fonctions trouveLettre(lettre) , codage (message).

B-2 Écrire le programme principal correspondant à l'algorithme donné à la partie A.

B-3QUESTION BONUS : Appliquer les modifications indiquées pour la saisie, à la question A-6.

Sujet intéressant au premier abord mais qui réserve des surprises et qui n'est pas facile à réaliser dans le temps demandé. Il faut essayer de le faire en se minutant. J'aimerais connaitre le pourcentage de réussite d'un exercice comme celui-ci. Vous pouvez utiliser le système de commentaire si vous avez des questions.