Pour sécuriser l’envoi des messages, deux chercheurs cryptent leurs messages en utilisant le principe suivant :
1- Saisir le message à crypter msg, sachant qu’il est composé par des lettres majuscules et des espaces.
2- Faire la somme des chiffres du code ASCII de chaque lettre du message msg. Dans le cas ou cette somme n’est pas un nombre à un seul chiffre on rend l’addition jusqu’à obtenir un seul chiffre auquel on ajoute une valeur aléatoire allant de 0 à 17. Le nombre obtenu représentera le rang alphabétique de la lettre de remplacement en majuscule.
Exemple : Pour le message « BACSC », on aura après cryptage : « RSLRZ ».
En effet « B » est remplacé par « R » car le code ASCII de B est 66 et après l’addition des chiffres on obtient 3 (6+6=12 à 1+2=3) et si la valeur aléatoire est 15, l’ordre alphabétique du caractère de remplacement est 18=3+15 qui « R ».
Ecrire un programme Python qui permet de saisir un message et une clé de cryptage puis d’afficher le message crypté.
Pour écrire un algorithme qui crypte un message selon le principe décrit, nous allons suivre les étapes suivantes :
Initialisation : Demander à l'utilisateur de saisir le message à crypter.
Cryptage du message :
Initialiser une chaîne vide ch
qui contiendra le message crypté.
Pour chaque caractère dans le message :
Si le caractère est un espace, l'ajouter directement à ch
et passer au caractère suivant.
Sinon :
1- Convertir le caractère en son code ASCII.
2- Calculer la somme des chiffres du code ASCII du caractère:
a) Si la somme est supérieure ou égale à 10, continuer à additionner les chiffres jusqu'à obtenir un seul chiffre.
b) Ajouter une valeur aléatoire entre 0 et 17 au résultat obtenu pour déterminer le rang alphabétique du caractère de remplacement :
c) Convertir ce rang en une lettre majuscule correspondante.
d) Ajouter cette nouvelle lettre à ch
.
Affichage du message crypté : Afficher le message crypté ch
.
Dans cet algorithme, On va utiliser 3 fonctions :
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_message
Cette fonction vérifie que le message saisi contient uniquement des lettres minuscules 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 ou non majuscules Ecrire("la chaine contient des caracteres non alphabetique ou non majuscules") retourner Faux Sinon Ecrire("le message est accepte") retourner Vrai Fin si Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La fonction saisie_message
Cette fonction saisit le message composé uniquement des lettres 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 majuscules et des espaces: ') lire(ch) Tant que verif_message(ch)=Faux faire Ecrire('donner un message contenant uniquement des lettresmajusculess et des espaces: ') 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 17 18 19 20 |
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 majuscule code<-ord(message[i]) Tant que (code > 9) faire ch1<-str(code) code<-0 Pour j de 0 à long(ch1)-1 faire code<-code+Valeur(ch1[j]) Fin pour Fin tant que ch<-ch+chr(code+random(0, 17)+64) Sinon ch=ch+' ' # ajout de l'espace Fin si Fin pour retourner ch # retourner le message crypte Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
j | entier |
code | entier |
ch | chaîne des caractères |
ch1 | 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 |
import random def verif_message(ch): i=0 # Verifier si la chaine est composee uniquement par des lettres 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 miniscule") return False else : print("le message est accepte") 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 majiscules et des espaces: ') while verif_message(ch)==False : ch=input('donner un message contenant uniquement par des lettres majiscules et des espaces: ') return ch def crypter_message(message): ch='' for i in range(len(message)): if (message[i]!=' '): code=ord(message[i]) while (code > 9): ch1=str(code) code=0 for j in range(len(ch1)): code=code+int(ch1[j]) ch=ch+chr(code+random.randrange(0, 17)+64) else: ch=ch+' ' return ch # programme principal message=saisie_message() print('le message crypte est : '+crypter_message(message)) |
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.
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 |
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 ("code-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 ou non majuscules") return False else : print("le message est accepte") return True def crypter(): message = windows.message.text() ch='' if verif_message(message) : for i in range(len(message)): if (message[i]!=' '): code=ord(message[i]) while (code > 9): ch1=str(code) code=0 for j in range(len(ch1)): code=code+int(ch1[j]) else: ch=ch+' ' ch=ch+chr(code+random.randrange(0, 17)+64) windows.msg.setText('le message crypte est : '+ch ) 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