Pour sécuriser l’envoi des messages, deux chercheurs cryptent leurs messages en utilisant le principe suivant :
1- Saisir le message à crypter, sachant qu’il est composé par des lettres majuscules et des espaces.
2- Saisir la clé de cryptage qui est une chaine de caractères chcle composée uniquement par des chiffres et ayant la même longueur que le message à crypter.
3- Remplacer chaque lettre du message msg, d’ordre alphabétique i, par la lettre d’ordre alphabétique j avec j=j+e, sachant que c est le chiffre chcle ayant le même indice que la lettre à crypter.
N.B : L’espace ne sera pas cypté et si j dépasse 26, on reprend les lettres alphabétiques dès le début
Exemple : Soit le message « EXCELLENTE PERFORMANCE » et soit la clé « 1954632738401653628451 »
Message initial : E X C E L L E N T E P E R F O R M A N C E
La clé de cryptage : 1 9 5 4 6 3 2 7 3 8 4 0 1 6 5 3 6 2 8 4 5 1
Message codé : F G H I R O G U W M P F X K R X O I R H F
En effet : La lettre « E » est d’ordre alphabétique 5 sera remplacé par lettre d’ordre alphabétique 5+1=6 c'est-à-dire « F ».
La lettre « X » est d’ordre alphabétique 24 sera remplacé par lettre d’ordre alphabétique 24+9=33, 33 MOD 26=7 c'est-à-dire « G ».
Ecrire un programme Python qui permet de saisir un message et une clé de cryptage puis d’afficher le message crypté.
Pour crypter un message en utilisant le principe décrit, voici l'algorithme en détail :
Initialisation :
1- Saisir le message à crypter, constitué de lettres majuscules et d'espaces.
2- Saisir la clé de cryptage chcle
, une chaîne de caractères numériques de la même longueur que le message.
Cryptage :
1- Créer une chaîne vide ch
pour stocker le message crypté.
2- Pour chaque caractère message[i]
dans le message :
Si message[i]
est un espace, l'ajouter directement à ch
.
Sinon, obtenir l'ordre alphabétique de message[i]
(où A
= 1, B
= 2, ..., Z
= 26).
Convertir le chiffre chcle[i]
correspondant à l'indice i
en entier c
.
Calculer le nouvel ordre alphabétique j
en utilisant la formule : j = (i + c) mod 26
.
Si j = 0
, le remplacer par 26 pour boucler correctement dans l'alphabet.
Trouver la lettre correspondant à cet ordre alphabétique et l'ajouter à ch
.
Affichage : Afficher le message crypté.
Dans cet algorithme, On va utiliser 5 fonctions :
Algorithme du programme principal
1 2 3 4 5 6 |
Algorithme cryptage_message Debut message<-saisie_message() chcle<-saisie_cle(message) Ecrire('le message crypte est : '+crypter_message(message,chcle)) Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
message | chaîne des caractères |
chcle | chaîne des caractères |
La fonction verif_message
Cette fonction vérifie que le message saisi contient uniquement des lettres et des espaces
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Fonction verif_message(ch:chaîne):booleen Début i<-0 # Verifier si la chaine est composee uniquement par des lettres majuscules et des espaces Tant que (i<len(ch)) and (('A'<=ch[i]<='Z') or(ch[i]==' ')) faire 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 Ecrire("le message est accepte") retourner Vrai Fin si Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La fonction verif_cle
Cette fonction vérifie que le cle saisi contient uniquement des chiffres
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Fonction verif_cle(ch:chaîne):booleen Début i<-0 # Verifier si la chaine est composee uniquement par des caracteres non numeriques Tant que (i<long(ch)) et ('0'<=ch[i]<='9') faire i<-i+1 Fin tant que Si (i<long(ch)) alors # si la chaine contient des caracteres non numeriques Ecrire("le cle contient des caracteres non numeriques") retourner Faux Sinon retourner Vrai Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La fonction saisie_message
Cette fonction saisit le message composé uniquement des lettres majuscules et des espaces
1 2 3 4 5 6 7 8 9 |
Fonction saise_message():chaine Début Ecrire('donner un message contenant uniquement des lettres et des espaces: ') lire(ch) Tant que verif_message(ch)=Faux faire Ecrire('donner un message contenant uniquement des lettres et des espaces: ') lire(ch) Fin tant que Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
ch | chaine des caracteres |
La fonction saisie_cle
Cette fonction saisit le clé composé uniquement des chiffres et de même longueur que le message
1 2 3 4 5 6 7 8 9 |
Procédure saise_message(message):chaine Début Ecrire('donner un message contenant uniquement des chiffres et de meme longueur que le message : ') lire(ch) Tant que verif_cle(ch)=Faux et long(ch)!=long(message) faire Ecrire('donner un message contenant uniquement des chiffres et de meme longueur que le message : ') lire(ch) Fin tant que Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
ch | chaine des caracteres |
La fonction crypter_message
Cette fonction crypte le message entré par l'utilisateur.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Fonction crypter_message(t:tab,n:entier):chaine Début ch<-'' Pour i de 0 à long(message)-1 faire Si message[i]!=' ' alors # le caractere est une lettre n<-int(chcle[i]) code<-(ord(message[i])-64) + n Si (code> 26) alors code=code mod 26 Finsi ch=ch+chr(code+64)]) Sinon ch=ch+' ' # ajout de l'espace Fin return ch # retourner le message crypte Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
code | entier |
ch | chaîne des caractères |
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 |
def verif_message(ch): i=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") return False else : print("le message est accepte") return True def verif_cle(ch): i=0 # Verifier si la chaine est composee uniquement par des caracteres non numeriques while(i<len(ch)) and ('0'<=ch[i]<='9') : i=i+1 if (i<len(ch)) : # si la chaine contient des caracteres non numeriques print("le cle contient des caracteres non numeriques") 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 majuscules et des espaces: ') while verif_message(ch)==False : ch=input('donner un message contenant uniquement par des lettres majuscules et des espaces: ') return ch def saisie_cle(message): ch=input('donner une cle compose des '+str(len(message))+' chiffres: ') while verif_cle(ch)==False or len(ch)!=len(message) : ch=input('donner une cle compose des '+str(len(message))+' chiffres: ') return ch def crypter_message(message,chcle): ch='' for i in range(len(message)): if message[i]!=' ': # le caractere est une lettre n=int(chcle[i]) code=(ord(message[i])-64) + n if (code> 26): code=code % 26 ch=ch+chr(code+64) else: ch=ch+' ' # ajout de l'espace return ch # retourner le message crypte # programme principal message=saisie_message() chcle=saisie_cle(message) print('le message crypte est : '+crypter_message(message,chcle)) |
Exécution du programme
Pour créer une application en Python pour crypter un message, 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é 'message' pour entrer un message.
QLineEdit
nommé 'cle' pour entrer un cle.
QPushButton
nommé 'bt_crypter' pour exécuter le module crypter_message.
QLabel
nommé 'msg' pour afficher un message d'erreur et le message crypté
Enregistrez le fichier avec l'extension .ui
, par exemple crypter-message.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 |
from PyQt5.uic import loadUi from PyQt5 import QtCore, QtGui from PyQt5.QtWidgets import * from PyQt5 import QtCore, QtGui, QtWidgets app = QApplication([]) windows = loadUi ("crypter-message-interface.ui") 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") return False else : print("le message est accepte") return True def verif_cle(ch): i=0 # Verifier si la chaine est composee uniquement par des caracteres non numeriques while(i<len(ch)) and ('0'<=ch[i]<='9') : i=i+1 if (i<len(ch)) : # si la chaine contient des caracteres non numeriques print("le cle contient des caracteres non numeriques") return False else : return True def crypter(): message = windows.message.text() if verif_message(message) : chcle = windows.chcle.text() if (verif_cle(chcle)) and (len(chcle)==len(message)): ch='' for i in range(len(message)): if message[i]!=' ': # le caractere est une lettre n=int(chcle[i]) code=(ord(message[i])-64) + n if (code> 26): code=code % 26 ch=ch+chr(code+64) else: ch=ch+' ' #ajout de l'espace windows.msg.setText('le message crypte est : '+ch ) else: windows.msg.setText('donner une cle compose des '+str(len(message))+' chiffres: ') else: windows.msg.setText('donner un message compose par des lettres majuscules 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