Sujet de cryptage – Bac théorique – Section informatique – 2017

Bac Info 09-01-26
21 0

Sujet (Algo et programmation - Bac 2017)

La stéganographie est une méthode qui consiste à cacher un texte dans une image numérique bitmap. Cette méthode peut aider à échanger des messages secrets.

Dans une image RVB, chaque pixel est représenté par une chaîne de 6 chiffres hexadécimaux ; les deux premiers représentent l'intensité de la couleur "Rouge", les deux suivants celle de la couleur "Vert" et les deux derniers représentent l'intensité de la couleur "Bleu".

On se propose d'utiliser cette technique pour crypter un texte. Pour cela on dispose d'un fichier texte à crypter nommé "source.txt" situé sur la racine du disque C et comportant N lignes non vides (1 < N < 40) de longueur maximale 120 caractères chacune.

Le procédé de cryptage est décrit ci-dessous :

1- générer une matrice carrée M (40x40) à partir du fichier "source.txt" comme suit :

- initialiser les cases de la matrice par le code de la couleur blanche "FFFFFF"

- remplir chaque ligne de la matrice M par une ligne du fichier "source.txt" de la manière suivante :

ajouter à la fin de la ligne, si c'est nécessaire, un ou deux espaces pour que sa longueur soit divisible par trois

subdiviser la ligne en blocs de trois caractères consécutifs et remplir chaque case de la matrice par la chaîne résultante de la concaténation des équivalents hexadécimaux du code ASCII des trois caractères de chaque bloc

2- générer un fichier "code.txt" à partir de la matrice M, où chaque ligne du fichier correspond à la concaténation du contenu d'une colonne de la matrice.

En effet :

- la matrice M a été initialisée par le code de la couleur blanche "FFFFFF"

- la première ligne de la matrice M est remplie à partir de la première ligne du fichier "source.txt" comme suit :

- étant donné que la longueur de la première ligne du fichier "source.txt" est non divisible par 3, on ajoute un espace à la fin pour obtenir 4 groupements de 3 caractères consécutifs :

le premier élément de la matrice 1V111,11 est égal à "424143" car :

- le code ASCII de "B" est 66 et son équivalent hexadécimal est 42

- le code ASCII de "A" est 65 et son équivalent hexadécimal est 41

- le code ASCII de "C" est 67 et son équivalent hexadécimal est 43 la concaténation des 3 équivalents hexadécimaux donne "424143" d'où le contenu de M[1,11= "424143"

- le même procédé donne M[1,2] = "205349", M11,31= "203230" et M[1,4] = "313620"

les autres lignes de la matrice M sont remplies selon le même procédé.

D'où, en concaténant les valeurs de chaque colonne de la matrice M pour former une ligne du fichier, on obtient le fichier "code.txt" ci-dessous :

Travail demandé :

I - Analyser le problème en le décomposant en modules.

2- Ecrire un algorithme solution pour chaque module envisagé. Chaque algorithme proposé doit être accompagné d'un tableau de déclaration des objets

 

Solution Algorithmique

Dans cet algorithme, On va utiliser trois fonctions et quatre procédures:

- la fonction saisie_lignes()

- la fonction saisie_ch()

- la procédure remplir_fichier_source()

- la procédure initialiser_matrice()

- la fonction convert_hexa()

- la procédure remplir_matrice()

- la procédure remplir_fichier_code()

 

Algorithme du programme Principal

Déclaration des objets

Objet Type / Nature
n entier
m matrice

 

La fonction saisie_lignes

Cette fonction permet de demander à l’utilisateur de saisir un nombre entier représentant le nombre de lignes, en s’assurant que cette valeur est strictement comprise entre 1 et 40.

1- Elle lit une valeur entière saisie au clavier.

2- Elle vérifie la validité de cette valeur.

3- Tant que le nombre saisi n’est pas compris entre 1 et 40, la saisie est redemandée.

4- Elle retourne finalement un entier valide, utilisable comme nombre de lignes du fichier source.

Déclaration des objets

Objet Type / Nature
n entier

 

La fonction saisie_ch

Cette fonction permet de saisir une chaîne de caractères valide, dont la longueur est comprise entre 1 et 120 caractères.

1- Elle demande à l’utilisateur de saisir une chaîne.

2- Elle vérifie que la longueur de la chaîne respecte l’intervalle autorisé [1,120].

3- Tant que la chaîne est vide ou dépasse 120 caractères, la saisie est redemandée.

4- Elle retourne la chaîne correcte, prête à être utilisée par le programme.

Déclaration des objets

Objet Type / Nature
ch chaîne

 

La procédure remplir_fichier_source

Cette procédure permet de créer et remplir le fichier texte Source.txt avec n lignes de texte saisies par l’utilisateur.

1- Elle ouvre (ou crée) le fichier Source.txt en mode écriture.

2- Elle demande à l’utilisateur de saisir n chaînes de caractères, chacune représentant une ligne du fichier.

3- Chaque chaîne saisie est écrite dans le fichier suivie d’un retour à la ligne.

4- Elle ferme le fichier après la fin de l’écriture.

Déclaration des objets

Objet Type / Nature
ch chaîne
i entier
f fichier

 

La procédure initialiser_matrice

Cette procédure permet d’initialiser la matrice m de dimension 40 × 40 en affectant à toutes ses cases la valeur "FFFFFF".

1- Elle parcourt la matrice ligne par ligne et colonne par colonne.

2- Pour chaque élément m[i][j], elle attribue la chaîne "FFFFFF".

3- Elle garantit que la matrice est totalement remplie avec une valeur par défaut avant toute autre utilisation.

Déclaration des objets

Objet Type / Nature
i entier
j entier

 

La fonction convertir_hexadecimal

Cette fonction a pour rôle de convertir un nombre décimal (base 10) en un nombre hexadécimal (base 16) en utilisant la méthode de conversion manuelle.

1- Elle divise successivement le nombre par 16.

2- À chaque étape, elle récupère le reste, qui correspond à un chiffre hexadécimal.

3- Comme l’hexadécimal utilise 16 symboles (0–9 et A–F), la fonction récupère le bon caractère dans la chaîne :"0123456789ABCDEF"

4- Chaque caractère obtenu est ajouté à gauche pour construire correctement le nombre hexadécimal.

5- La conversion s’arrête lorsque le nombre devient 0.

Déclaration des objets

Objet Type / Nature
hexa chaine
caracteres chaine
reste entier

 

La procédure remplir_matrice

Cette procédure permet de remplir la matrice m à partir du contenu du fichier Source.txt, en convertissant chaque groupe de 3 caractères en un code hexadécimal.

1- Elle ouvre le fichier Source.txt en mode lecture.

2- Elle lit toutes les lignes du fichier, chaque ligne correspondant à une ligne de la matrice.

- Pour chaque ligne, elle supprime le caractère de fin de ligne et complète la chaîne par des espaces afin que sa longueur soit un multiple de 3.

- Elle découpe la chaîne en blocs de 3 caractères.

3- Pour chaque bloc :

Chaque caractère est converti en code hexadécimal (via la fonction convert_hexa appliquée au code ASCII du caractère).

Les codes hexadécimaux obtenus sont concaténés.

Le résultat est stocké dans la matrice m à la position correspondante.

4- Enfin, elle ferme le fichier source.

Déclaration des objets

Objet Type / Nature
f_source chaîne
lignes chaîne
ligne chaîne
i entier
j entier
ch1 chaîne
elt chaîne

 

La procédure remplir_fichier_code

Cette procédure permet d’écrire le contenu de la matrice M dans le fichier texte code.txt tout en l’affichant simultanément à l’écran.

1- Elle ouvre (ou crée) le fichier code.txt en mode écriture.

2- Elle parcourt la matrice M de dimension 40 × 40.

3- Pour chaque élément m[i][j] :

La valeur est écrite dans le fichier code.txt.

La même valeur est affichée à l’écran, séparée par un espace.

Après chaque ligne de la matrice, un retour à la ligne est effectué à l’écran.

4- Enfin, elle ferme le fichier pour sauvegarder les données.

Déclaration des objets

Objet Type / Nature
f_code chaîne
i entier
j entier

 

Solution en Python

Exécution du programme

0 commentaire

laisser un commentaire

Veuillez noter s'il vous plaît*

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Passion de robotique

Atelier robotique

Construction des robots

Bras robotique

Maison intelligente

But de ce site web

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.

Coordonnées

Zaouiet Kontech-Jemmel-Monastir-Tunisie

+216 92 886 231

medaliprof@gmail.com

Photos des articles

Site robotique réalisé par Mohamed Ali Haj Salah - Prof Info