Exercices corrigés Python (Série 8)

17 Sep 2017 17 Sep 2017 28755 vues ESSADDOUKI Mostafa 10 min de lecture

Exercice 1 — Migration IPv4 → IPv6

 Exercice

Validation, classification et conversion d'adresses IPv4

 Niveau : Avancé

Étant donné un fichier texte F_IPV4.txt contenant une adresse IPv4 par ligne, on souhaite vérifier la validité de chaque adresse, déterminer sa classe, la convertir en IPv6 et écrire les résultats dans F_IPV6.txt.

Rappels — Adresses IPv4 Une adresse IPv4 valide est de la forme W.X.Y.Z avec W, X, Y, Z ∈ [0, 255].

Classes selon les bits de poids fort de W :
ClasseBits de début de WPlage WUsage
A0xxxxxxx0–127Grands réseaux
B10xxxxxx128–191Réseaux moyens
C110xxxxx192–223Petits réseaux
D1110xxxx224–239Multicast
E1111xxxx240–255Réservé
Conversion IPv4 → IPv6 (bloc 32 bits) Convertir chaque octet W, X, Y, Z en hexadécimal (2 chiffres), puis concaténer : WXHEX + XXHEX : YXHEX + ZXHEX (le : est inséré au milieu).

Exemple : 155.105.50.68
155 → 9B, 105 → 69, 50 → 32, 68 → 44
→ Bloc IPv6 : 9B69:3244
Travail demandé :
  1. Fonction valide(ip) — vérifier la validité d'une adresse IPv4
  2. Fonction classe(ip) — retourner la classe (A–E) d'une adresse valide
  3. Fonction adresseip6(ip) — convertir une IPv4 en bloc IPv6
  4. Fonction Genere() — générer le fichier F_IPV6.txt
Fonctions Python utiles bin(nb) → représentation binaire (ex: bin(155)'0b10011011')
hex(nb) → représentation hexadécimale (ex: hex(155)'0x9b')
Pour enlever le préfixe : bin(nb)[2:] et hex(nb)[2:].upper()
Exemple
Adresse IPv4
155.105.50.68
Ligne dans F_IPV6.txt
155.105.50.68 : B : 9B69:3244
Explication : 155 = 10011011₂ → bits 10 → Classe B. 155→9B, 105→69, 50→32, 68→44 → bloc 9B69:3244.

Exercice 2 — Chiffrement de Polybe

 Exercice

Crypter et décrypter un message avec le carré de Polybe

 Niveau : Avancé
Définition — Carré de Polybe Le chiffre de Polybe est un système de substitution qui remplace chaque lettre par ses coordonnées (ligne, colonne) dans une matrice 5×5 construite à partir d'un mot-clé.

Règles de construction de la matrice :
  • Placer les lettres du mot-clé en premier (sans doublons).
  • Compléter avec les lettres restantes de l'alphabet, dans l'ordre, sauf 'W'.
  • 'W' dans le message → remplacé par 00.
  • Espace → remplacé par _.

  Matrice pour le mot-clé 'MYSTER'


12345
1MYSTE
2RABCD
3FGHIJ
4KLNOP
5QUVXZ
Travail demandé :
  1. Fonction Crypter_Polybe(message, motcle) — chiffrer un message
  2. Fonction Decrypter_Polybe(message, motcle) — déchiffrer un message
Exemple
Entrée
Message : CHERCHER POLYBE DANS WIKIPEDIA
Clé     : MYSTER
Sortie chiffrée
2433152124331521_454442122315_25224313_003441344515253422
Convention : _ représente un espace, 00 représente la lettre W.

Récapitulatif

ExerciceFonctionsTechnique cléComplexité
IPv4 → IPv6valide, classe, adresseip6, GenereManipulation de chaînes, bin(), hex(), fichiersO(n) — n lignes du fichier
Polybematrice, Crypter_Polybe, Decrypter_PolybeMatrice 5×5, recherche de coordonnéesO(m × 25) naïf, O(m) avec dict
Points clés à retenir
  • Pour l'IPv4 : toujours utiliser try/except autour de int() pour gérer les adresses malformées.
  • hex(n)[2:].zfill(2).upper() garantit une représentation hexadécimale sur exactement 2 chiffres.
  • Le gestionnaire de contexte with open(...) ferme automatiquement les fichiers, même en cas d'erreur.
  • Pour le chiffrement de Polybe : un dictionnaire remplace avantageusement la recherche linéaire dans la matrice.
  • La symétrie chiffrement/déchiffrement : les mêmes dictionnaires suffisent, il suffit d'inverser la direction de lecture.
Sortie
// La sortie apparaîtra ici…
Prêt · Ctrl+Entrée pour exécuter

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.