Dans le but de sécuriser les messages à envoyer, on peut faire appel à une méthode de cryptage.
Soit la méthode de cryptage suivante qui consiste à crypter par transposition de caractères, un message M de longueur L décrite comme suit :
-Déterminer tous les diviseurs de L autres que 1 et lui-même.
-Pour chaque diviseur d de L et en commençant par le plus petit, on inverse symétriquement les caractères de chaque bloc de longueur d.
Exemple : Pour le message ‘’INFORMATIQUE’’ dont la longueur L=12.
Les diviseurs de 12 autres que 1 et 12 sont : 2, 3, 4 et 6
Les inversions des blocs de caractères seront effectuées comme suit :
Après inversion de chaque bloc de 2 caractères de la chaîne ‘’INFORMATIQUE’’, on aura la chaîne ‘’NIOFMRTAQIEU’’.
Après inversion de chaque bloc de 3 caractères de la chaîne ‘’ NIOFMRTAQIEU’’, on aura la chaîne ‘’OINRMFQATUEI’’.
Après inversion de chaque bloc de 4 caractères de la chaîne ‘’ OINRMFQATUEI’’, on aura la chaîne ‘’RNIOAQFMIEUT’’.
Après inversion de chaque bloc de 4 caractères de la chaîne ‘’ RNIOAQFMIEUT’’, on aura la chaîne ‘’QAOINRTUEIMF’’.
On se propose d’écrire un programme Python qui permet de saisir un message M dont la longueur est un nombre non premier et > 4 et d’afficher le message crypté en utilisant la méthode décrite précédemment.
Voici l'approche algorithmique pour crypter un message en utilisant la méthode de transposition par inversion de blocs de caractères selon les diviseurs de la longueur LL du message, comme décrit dans l'exercice :
1- Saisie du message :
Demander à l'utilisateur de saisir un message M.
Calculer la longueur L du message.
2- Détermination des diviseurs de :
Identifier tous les diviseurs de L autres que 1 et L lui-même. Ces diviseurs seront utilisés pour inverser des blocs de caractères dans le message.
3- Inversion des blocs :
Pour chaque diviseur d, en commençant par le plus petit, inverser chaque bloc de d caractères du message de façon symétrique.
Répéter cette opération pour tous les diviseurs trouvés.
4- Affichage du message crypté :
Une fois toutes les inversions effectuées, 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 ch<-saisie_message() Ecrire('le message crypte est : '+crypter_message(ch)) Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
ch | chaîne des caractères |
La fonction saisie_message
Cette fonction oblige l'utilisateur à saisir un message dont sa longueur est non premier et > 4.
1 2 3 4 5 6 7 8 9 10 |
fonction saisie_message():chaine Début Ecrire('donner un message a crypter dont la longueur est non premier et > 4: ') Lire(ch) Tant que (long(ch)<4) ou (long(ch) div 2 !=0) faire Ecrire('donner un message a crypter dont la longueur est non premier et > 4: ') Lire(ch) Fin tant que retourner ch Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
ch | chaîne des caractères |
La fonction inversion
Cette fonction inverse un bloc de d caractères du message de façon symétrique.
1 2 3 4 5 6 7 8 9 |
fonction inversion(ch:chaine):chaine Début ch_inverse<-'' Pour i de 0 à long(ch) [pas=d] faire # Prendre un bloc et l'inverser bloc <- Sous_chaine(ch,i,i+d) ch_inverse <- ch_inverse+ bloc[::-1] # la chaine entiere sera affichée du dernier caractere de la chaine au premier retourner ch_inverse Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
ch | chaîne des caractères |
ch_inverse | chaîne des caractères |
bloc | chaîne des caractères |
i | entier |
La fonction crypter_message
Cette fonction crypte le message saisi par l'utilisateur.
1 2 3 4 5 6 7 8 9 10 11 |
fonction crypter_message(ch):chaine Début l<-long(ch) Pour i de 2 à l div 2 faire Si ( l mod i==0 ) faire ch<-inversion(ch,i) Ecrire('pour i='+i+' '+ch) Fin si Fin pour retourner ch Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
l | entier |
i | 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 |
def saisie_message(): ch=input('donner un message a crypter dont la longueur est non premier et > 4: ') while(len(ch)<4) or (len(ch) %2 !=0): ch=input('donner un message a crypter dont la longueur est non premier et > 4: ') return ch def inversion(ch,d): ch_inverse='' for i in range(0,len(ch),d): # Prendre un bloc et l'inverser bloc = ch[i:i + d] ch_inverse += bloc[::-1] return ch_inverse def crypter_message(ch): l=len(ch); for i in range(2, l // 2+1): if ( l % i==0 ): ch=inversion(ch,i) print('pour i='+str(i)+' '+ch) return ch # programme principal ch=saisie_message() print('le message crypte est : '+(crypter_message(ch))) |
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
QPushButton
nommé 'bt_crypter' pour crypter le message
QLabel
nommé 'resultat' pour afficher le message crypté
Enregistrez le fichier avec l'extension .ui
, par exemple cryptage-interface.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 |
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-interface.ui") def inversion(ch,d): ch_inverse='' for i in range(0,len(ch),d): # Prendre un bloc et l'inverser bloc = ch[i:i + d] ch_inverse += bloc[::-1] return ch_inverse def crypter(): windows.msg.clear() ch = windows.message.text() if (len(ch)>=4) and (len(ch) %2 ==0): l=len(ch) liste='' for i in range(2, l // 2+1): if ( l % i==0 ): ch=inversion(ch,i) liste=liste+('pour i='+str(i)+' '+ch+'\n') liste=liste+'le message crypte est : '+ch windows.resultat.setText(liste) else: windows.msg.setText('donner un message a crypter dont la longueur est non premier et > 4:') 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