L’American Standard Code for Information Interchange (ASCII) est un système de codage qui associe à chaque caractère un nombre représenté en mémoire sur 8 bits.
Un caractère imprimable, ayant un code ASCII entre 32 et 126, est un symbole (lettre, chiffre, signe de ponctuation, etc.) destiné à être affiché sur l’écran ou imprimé.
Exemple : Le code ASCII du caractère "A" est 65 et sa représentation binaire est 01000001
NB. : Le caractère espace est un caractère imprimable de code ASCII 32.
Afin d’assurer la confidentialité des échanges des données, le responsable informatique d’une entreprise utilise une clé de cryptage pour chiffrer les données avant une éventuelle transmission.
Dans ce contexte, on envisage de concevoir une application, enrichie par une interface graphique, qui simule la création et l’affichage de cette clé de cryptage.
Cette application permet de :
- saisir un entier N multiple de 8 (avec 32 ≤ N ≤ 64),
- remplir un tableau T par N valeurs binaires (0 ou 1) générées aléatoirement,
- coder chaque séquence de 8 valeurs binaires du tableau T en un caractère imprimable à l’aide de la fonction Coder définie ci-après (page 2 sur 3),
- former une clé de cryptage en concaténant, dans leur ordre d’apparition, tous les caractères imprimables obtenus.
Exemple :
Pour N = 32 et le tableau T suivant :
![]()
Le programme affiche : La clé est B?r*
En effet,
- La concaténation des 8 bits de la première séquence de T est 01000010, qui correspond au caractère imprimable "B".
- La concaténation des 8 bits de la deuxième séquence de T est 00111111, qui correspond au caractère imprimable "?".
- La concaténation des 8 bits de la troisième séquence de T est 11100001, son codage en caractère imprimable est "r".
- La concaténation des 8 bits de la quatrième séquence de T est 00011100, son codage en un caractère imprimable est "*".
Travail demandé
1. Créer l’interface graphique illustrée dans la figure Fig-1 suivante et l’enregistrer sous le nom InterfaceClé.

2. Créer un programme en python et l’enregistrer sous le nom Clé, dans lequel on demande :
a. D’écrire un module Remplir (T, N) qui permet de charger aléatoirement un tableau T par N chiffres binaires (0 ou 1).
b. D’implémenter l’algorithme suivant de la fonction Coder (CH) permettant de transformer une chaine de caractères de 8 bits en un caractère imprimable.

c. D’écrire une fonction Former (T, N) qui retourne une chaîne de caractères formée par la concaténation des caractères imprimables correspondants au codage de chaque séquence de 8 valeurs binaires du tableau T. Ce module doit faire appel à la fonction Coder.
d. D’écrire un module Play, qui s’exécute suite au clic sur le bouton "Générer", permettant :
- de récupérer la valeur du nombre N saisi, de s’assurer de sa validité comme décrit précédemment et d’afficher, le cas échéant, le message adéquat via le label dédié à l’affichage, comme illustré dans les figures Fig-2, Fig-3 et Fig-4,
- d’exploiter les modules Remplir et Former afin d’afficher le message adéquat via le label dédié à l’affichage, comme illustré dans la figure Fig-5,
e. D’exploiter l’annexe présentée ci-après tout en apportant les modifications nécessaires à l’intégration de l’interface graphique InterfaceClé.

Pour créer une application en Python et Designer QT afin de concevoir une application, enrichie par une interface graphique, qui simule la création et l’affichage de clé de cryptage, on va suivre ces étapes:
a- Ouvrez Qt Designer et créez un nouveau fichier de type Main Window.
b- Ajoutez ces widgets:
QLabel nommé 'affichage' pour afficher les messages générés par le programme
QLineEdit nommé 'n' pour entrer l'entier n.
QPushButton nommé 'generer_bt' pour exécuter le module Play()

Enregistrez le fichier avec l'extension .ui, par exemple InterfaceClé.ui.
Voici un exemple de script Python qui utilise l'interface graphique générée par Qt Designer.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
# ========================================================= # IMPORTATION DES BIBLIOTHÈQUES # ========================================================= from PyQt5.uic import loadUi # Pour charger l'interface graphique (.ui) from PyQt5.QtWidgets import QApplication # Pour créer l'application PyQt5 from numpy import * # Pour utiliser les tableaux (array) import random # Pour générer des nombres aléatoires # ========================================================= # CRÉATION DU TABLEAU POUR STOCKER LA SUITE # ========================================================= # Tableau de 99 éléments destiné à stocker les bits (0 et 1) t = array([int] * 99) # Création de l'application PyQt5 app = QApplication([]) # Chargement de l’interface graphique créée avec Qt Designer windows = loadUi("InterfaceClé.ui") # ========================================================= # FONCTION : REMPLISSAGE DU TABLEAU # ========================================================= def remplir(t, n): # Générer aléatoirement des valeurs 0 ou 1 for i in range(n): t[i] = random.randint(0, 1) # ========================================================= # FONCTION : CODAGE BINAIRE → CARACTÈRE ASCII # ========================================================= def coder(ch): # Variable qui contiendra la valeur décimale x = 0 # Poids binaire (1, 2, 4, 8, ...) p = 1 # Parcours de la chaîne binaire de droite à gauche for i in range(len(ch)-1, -1, -1): # Si le bit vaut 1, ajouter le poids correspondant if ch[i] == "1": x = x + p # Doubler le poids à chaque étape p = p * 2 # Vérifier si le code ASCII est imprimable if x < 32 or x > 126: # Transformer la valeur pour obtenir un caractère affichable x = 32 + (x * 94) // 255 # Retourner le caractère correspondant return chr(x) # ========================================================= # FONCTION : FORMATION DE LA CLÉ # ========================================================= def former(t, n): # Variable qui contiendra la clé finale code = '' # Parcours du tableau par groupes de 8 bits for i in range(0, n, 8): # Chaîne binaire temporaire ch = '' # Construire une chaîne de 8 bits for j in range(i, i + 8): ch = ch + str(t[j]) # Afficher la chaîne binaire dans la console print(ch) # Convertir les 8 bits en caractère puis l’ajouter à la clé code = code + coder(ch) # Retourner la clé générée return code # ========================================================= # FONCTION PRINCIPALE (EXÉCUTÉE LORS DU CLIC) # ========================================================= def play(): # Effacer l'ancien résultat affiché windows.affichage.clear() # Vérifier que l'utilisateur a saisi une valeur if windows.n.text() != '': # Conversion de la saisie en entier n = int(windows.n.text()) # Vérifier que n est valide : # - compris entre 6 et 99 # - multiple de 8 if (6 <= n <= 99) and (n % 8 == 0): # Génération aléatoire des bits remplir(t, n) # Génération et affichage de la clé windows.affichage.setText('La clé est ' + former(t, n)) else: # Message d'erreur si n est invalide windows.affichage.setText( "n doit être : 32<=n<=64 et multiple de 3" ) else: # Message si aucun nombre n'est saisi windows.affichage.setText("Veuillez saisir un nombre !") # ========================================================= # CRÉATION DE L'APPLICATION PYQT5 # ========================================================= # Affichage de la fenêtre principale windows.show() # Connexion du bouton "generer_bt" à la fonction play() windows.generer_bt.clicked.connect(play) # Lancement de la boucle principale de l’application app.exec_() |
La robotique éducative joue un rôle important dans l'éducation des enfants et des jeunes en les aidant à acquérir des compétences en science et technologie.
Dans ce cadre notre site web représente une excellente ressource pour les parents, les enseignants et les enfants qui souhaitent découvrir la robotique.
Zaouiet Kontech-Jemmel-Monastir-Tunisie
Site robotique réalisé par Mohamed Ali Haj Salah - Prof Info