Archi Projet Chiffrement

Identification

Infoforall

16 - Projet XOR


Evaluation ✎ : -

Documents de cours :

1 - Programmmation du cryptage avec xor

Les attendus du programme ne parle que du cas débranché lors de l'épreuve. Ce qui suit vous permettra donc simplement de travailler l'épreuve de programmation.

Si vous êtes en retard sur les activités, passez votre chemin. C'est intéressant mais vous avez d'autres choses à rattraper avant !

En réalité, cette partie va être intégrée dans une activité optionnelle à part. Elle va être retravaillée, il ne s'agit que du squelette.

Etape 1 : il faut transformer le texte en octets

Il faut donc utiliser un encodage précis. Nous allons travailler avec l'UTF-8, le standard actuel.

21° Utiliser la fonction suivante pour visualiser la transformation de votre chaîne de caractères en suite de valeurs (entre 0 et 255 puisqu'il s'agit d'une suite d'octets).

1 2 3 4 5 6 7
def tab_octets(chaine:str) -> list: """Renvoie un tableau contenant les octets encodant la chaîne en UTF-8""" octets = chaine.encode('utf-8') return list(octets) message = "AbCé" # Votre message t_o = tab_octets(message) # Un tableau d'octets représentant le message

On obtient ainsi :

>>> message 'AbCé' >>> t_o [65, 98, 67, 195, 169]

Combien d'octets pour le A, le b et le C ?

Combien d'octets pour le é ? Pourquoi ?

Etape 2 : Transformer le tableau d'octets stockés en décimal sous forme d'un tableau ne comportant que des 0 et des 1.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
def tab_bits(t_octets:list) -> list : """Renvoie un tableau où chaque case est un bit""" reponse = [] for octet in t_octets : # pour chaque valeur décimale d'octets lue dans t_octets bits = f'{octet:08b}' # On transforme chaque valeur en string symbolisant les 8 bits bits = list(bits) # On transforme le string en tableau convertir_en_entier(bits) # On convertit "0" en 0, "1" en 1 dans le tableau. reponse = reponse + bits return reponse def tab_octets(chaine:str) -> list: """Renvoie un tableau contenant les octets encodant la chaîne en UTF-8""" octets = chaine.encode('utf-8') return list(octets) def convertir_en_entier(tableau :list) -> None : """Procédure qui modifie sur place le tableau en transformant les éléments en integers""" for index in range(len(tableau)) : tableau[index] = int(tableau[index]) message = "AbCé" # Votre message t_o = tab_octets(message) # Un tableau d'octets représentant le message t_b = tab_bits(t_o) # Un tableau de bits représentant le message

22° Vérifier que les 8 premiers bits du tableau t_b représente bien la valeur décimale 65 qui encode un A.

23° Créer le programme pour obtenir une clé et un message représenté sous forme de tableau de bits.

24° Créer une fonction qu'on nommera xor qui attend deux paramètres a et b (pouvant valoir 0 ou 1) et qui renvoie la valeur a XOR b.

25° Créer une fonction qu'on nommera cryptage qui attend le tableau de bits encodant le message, le tableau de bits encodant la clé et qui

    Créer une copie mc du tableau aussi grand que le message

    Pour chaque index du tableau du tableau mc :

    • On remplit cette case avec un XOR entre cet index dans le tableau du message et cet (index modulo longeur de la clé) dans le tableau de la clé.

26° Utiliser votre fonction pour obtenir le message crypté. Utiliser ensuite à nouveau votre fonction sur le message crypté pour retrouver la suite d'origine.

2 -

3 -

4 -

5 -

6 -

7 -

8 -

Activité publiée le 04 10 2020
Dernière modification : 04 10 2020
Auteur : ows. h.