Dans le but de sécuriser les messages à envoyer, on peut faire appel à une méthode de cryptage. Une des méthodes utilisées consiste à remplacer chaque lettre du message à crypter par celle qui la suit de p positions dans l’alphabet français, ou p désigne le nombre de mots du message.
NB : on suppose que le caractère qui suit la lettre ‘Z’ est le caractère ‘A’ et celui qui suit la lettre ’’z’’ est le caractère ‘a’.
Le caractère espace ne subit aucune modification.
Le code ASCII de la lettre ‘’a’’ est égale à 97 et celui de la lettre ‘’A’’ est égale à 65.
Exemple : Pour le message ‘’Examen Pratique En Informatique’’.
Etant donné que le message à crypter est formé de 4 mots, pour la lettre alphabétique ‘’E’’ par exemple, elle sera remplacée par ‘I’ car en ajoutant au code ASCII de ‘E’ qui est 69, on obtient 73 qui est le code ASCII de ‘’I’’.
En continuant à appliquer ce principe de codage, le message crypté sera :
"Ibeqir Tvexmuyi Ir Mrjsvqexmuyi"
On se propose d’écrire un programme Python qui permet de saisir un message formé uniquement de lettres et d’espaces puis de l’afficher crypté, en utilisant le principe ci-dessus.
NB : Le message peut contenir des espaces superflus (inutiles).
Pour crypter un message en utilisant le principe décrit, nous pouvons suivre un algorithme structuré en plusieurs étapes. Voici le principe algorithmique détaillé :
1. Saisie et nettoyage du message :
Lire le message de l'utilisateur.
Éliminer les espaces superflus au début, à la fin et entre les mots en utilisant un nettoyage des espaces.
2. Comptage des mots :
Compter le nombre de mots dans le message. Le nombre de mots, pp, sera utilisé comme le décalage des lettres dans l'alphabet pour crypter chaque caractère alphabétique.
3. Application du décalage sur chaque lettre : Parcourir chaque caractère du message :
- Si c'est une lettre majuscule (A-Z), appliquer le décalage en prenant en compte le code ASCII. Utiliser le modulo 2626 pour gérer le dépassement après la lettre 'Z'.
- Si c'est une lettre minuscule (a-z), effectuer la même opération en utilisant les bornes ASCII pour les minuscules.
- Si c'est un espace, laisser tel quel.
4. Affichage du message crypté :
Une fois chaque lettre traitée, afficher le message crypté.
Dans cet algorithme, On va utiliser une fonction et deux procédures:
Algorithme du programme Principal
1 2 3 4 5 |
Algorithme cryptage_message Debut message<-saisie_message() Ecrire('le message crypte est : '+crypter_message(message)) Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
message | chaîne des caractères |
La fonction verif_mot
Cette fonction vérifie si le mot saisi est formé uniquement des lettres.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
fonction supprimer_espaces(ch:chaine):chaîne Début Tant que (ch[0]=' ') faire # elimnier tous les espaces au début de la chaine ch<-Sous_chaine(ch,1,long(ch)) Fin tant que Tant que(ch[long(ch)-1]=' ') faire # elimnier tous les espaces a la fin de la chaine ch<-Sous_chaine(ch,0,long(ch)-1) Fin tant que Tant que (Pos(ch,' ')>0) faire ch<-ch.replace(" ", " ") # remplacer les doubles espaces par un seul espace Fin tant que retourner ch Fin |
La fonction verif_message
Cette fonction vérifie si un message est formé uniquement de lettres et d’espaces.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
fonction verif_message(ch:chaine):booleen Début nbr_mots<-0 ch<-supprimer_espaces(ch) i<-0 j<-0 ch1<-'' # Verifier si la chaine est composee uniquement par des lettres et des espaces Tant que(i<long(ch)) et (('A'<=Majus(ch[i])<='Z') ou (ch[i]=' ')) faire Si ((ch[i]=' ') ou (i=long(ch)-1)) faire nbr_mots<-nbr_mots+1 Fin si i<-i+1 Fin tant que Si (i<long(ch)) alors # si la chaine contient des caracteres non alphabetique et des espaces Ecrire("la chaine contient des caracteres non alphabetique") retourner Faux Sinon retourner Vrai Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
j | entier |
nbr_mots | entier |
ch1 | chaîne des caractères |
La fonction saisie_message
Cette fonction oblige l'utilisateur à saisir un message formé uniquement des lettres et des espaces.
1 2 3 4 5 6 7 8 9 10 |
fonction saisie_message():chaine Début Ecrire('donner un message contenant uniquement par des lettres des espaces: ') Lire(ch) Tant que (verif_message(ch)=Faux) faire Ecrire('donner un message contenant uniquement par des lettres des espaces: ') Lire(ch) Fin tant que retourner ch Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
ch | chaîne des caractères |
La fonction crypter_message
Cette fonction crypte le message saisi par l'utilisateur.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
fonction crypter_message(ch):chaine Début ch_crypte<-'' p<-nbr_mots pour i de 0 à long(ch)-1 faire Si (ch[i]!=' ') alors Si (Majus(chr(ord(ch[i])+p)<'Z') alors ch_crypte<-ch_crypte+chr(ord(ch[i])+p) Sinon Si (chr(ord(ch[i])+p)>'z')alors # si le caractere depasse la lettre z ch_crypte<-ch_crypte+'a' Sinon Si (chr(ord(ch[i])+p)>'Z')alors # si le caractere depasse la lettre Z ch_crypte<-ch_crypte+'A' Sinon ch_crypte<-ch_crypte+' ' Fin si Fin pour retourner ch_crypte Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
ch_crypte | chaîne des caractères |
p | entier |
i | entier |
nbr_mots | entier |
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 |
# Fonction qui supprime les espaces de la chaine des carcatères def supprimer_espaces (ch) : while(ch[0]==' '): # elimnier tous les espaces au début de la chaine ch=ch[1:len(ch)] while(ch[len(ch)-1]==' '): # elimnier tous les espaces a la fin de la chaine ch=ch[0:len(ch)-1] while (ch.find(' ')>0): ch=ch.replace(" ", " ") # remplacer les doubles espaces par un seul espace return ch nbr_mots=0 def verif_message(ch): global nbr_mots nbr_mots=0 ch=supprimer_espaces (ch) i=0 j=0 ch1='' # Verifier si la chaine est composee uniquement par des lettres et des espaces while(i<len(ch)) and (('A'<=ch[i].upper()<='Z') or(ch[i]==' ')) : if ((ch[i]==' ') or (i==len(ch)-1)) : nbr_mots=nbr_mots+1 i=i+1 if (i<len(ch)) : # si la chaine contient des caracteres non alphabetique et des espaces print("la chaine contient des caracteres non alphabetique") return False else : return True # Saisie du message et placer chaque caractere du message dans une case du tableau T def saisie_message(): ch=input('donner un message contenant uniquement par des lettres des espaces:\n ') while verif_message(ch)==False : ch=input('donner un message contenant uniquement par des lettres et des espaces:\n ') return ch def crypter_message(ch): ch_crypte='' p=nbr_mots for i in range(len(ch)): if (ch[i]!=' '): if (chr(ord(ch[i].upper())+p)<'Z'): ch_crypte=ch_crypte+chr(ord(ch[i])+p) elif (chr(ord(ch[i])+p)>'z'): # si le caractere depasse la lettre z ch_crypte=ch_crypte+'a' elif (chr(ord(ch[i])+p)>'Z'): # si le caractere depasse la lettre Z ch_crypte=ch_crypte+'A' else: ch_crypte=ch_crypte+' ' return ch_crypte # programme principal message=saisie_message() print('le message crypte est : '+str(crypter_message(message))) |
Exécution du programme
Pour créer une application en Python et Designer QT qui a pour but de crypter un message selon le principe décrit ci dessus, on va suivre ces étapes:
a- Ouvrez Qt Designer et créez un nouveau fichier de type Main Window.
b- Ajoutez ces widgets:
QLineEdit
nommé 'ch' pour entrer le message à crypter
QLabel
nommé 'msg' pour afficher des messages d'erreur et le message crypté
QPushButton
nommé 'bt_crypter' pour crypter le message
Enregistrez le fichier avec l'extension .ui
, par exemple cryptage_message-interace.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 |
from PyQt5.uic import loadUi from PyQt5 import QtCore, QtGui from PyQt5.QtWidgets import * from PyQt5 import QtCore, QtGui, QtWidgets import random app = QApplication([]) windows = loadUi ("cryptage_message-interace.ui") def supprimer_espaces (ch) : while(ch[0]==' '): # elimnier tous les espaces au début de la chaine ch=ch[1:len(ch)] while(ch[len(ch)-1]==' '): # elimnier tous les espaces a la fin de la chaine ch=ch[0:len(ch)-1] while (ch.find(' ')>0): ch=ch.replace(" ", " ") # remplacer les doubles espaces apar un seul espace return ch def verif_message(ch): i=0 global long_message j=0 # Verifier si la chaine est composee uniquement par des lettres majuscules et des espaces while(i<len(ch)) and (('A'<=ch[i]<='Z') or(ch[i]==' ')) : i=i+1 if (i<len(ch)) : # si la chaine contient des caracteres non alphabetique et des espaces print("la chaine contient des caracteres non alphabetique ou non majuscules") return False else : print("le message est accepte") return True nbr_mots=0 def verif_message(ch): global nbr_mots nbr_mots=0 ch=supprimer_espaces (ch) i=0 j=0 ch1='' # Verifier si la chaine est composee uniquement par des lettres et des espaces while(i<len(ch)) and (('A'<=ch[i].upper()<='Z') or(ch[i]==' ')) : if ((ch[i]==' ') or (i==len(ch)-1)) : nbr_mots=nbr_mots+1 i=i+1 if (i<len(ch)) : # si la chaine contient des caracteres non alphabetique et des espaces print("la chaine contient des caracteres non alphabetique") return False else : return True def crypter(): ch = windows.ch.text() if verif_message(ch): ch_crypte='' p=nbr_mots for i in range(len(ch)): if (ch[i]!=' '): if (chr(ord(ch[i].upper())+p)<'Z'): ch_crypte=ch_crypte+chr(ord(ch[i])+p) elif (chr(ord(ch[i])+p)>'z'): # si le caractere depasse la lettre z ch_crypte=ch_crypte+'a' elif (chr(ord(ch[i])+p)>'Z'): # si le caractere depasse la lettre Z ch_crypte=ch_crypte+'A' else: ch_crypte=ch_crypte+' ' windows.msg.setText('le message crypte est : '+ch_crypte ) else: windows.msg.setText('donner un message compose par des lettres et des espaces: ') windows.bt_crypter.clicked.connect(crypter) windows.show() app.exec_() |
Exécution du programme
Vous pouvez voir aussi :
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
+216 92 886 231
medaliprof@gmail.com
Site robotique réalisé par Mohamed Ali-Prof Info