• Aucun résultat trouvé

Retrouver le nombre caché

2.4 Retrouver le nombre caché

Il faut évidemment pouvoir extraire l’imagea de l’image c.

Nous avons caché 100 dans 20, ce qui a donné 22 ; à partir de 22, il faut pouvoir (espérer) retrouver 100.

À partir de c= (22)10 0 0 0 1 0 1 1 0 on va construire. . . a0.

• Il faut déjà récupérer les 4 bits de poids faible de c qui étaient les 4 bits de poids fort de

a : 0 1 1 0 .

On commence par annuler les 4 bits de poids fort avec un masque « et » qui conserve les bits de poids faible :c= (22)10 0 0 0 1 0 1 1 0 ET 0 0 0 0 1 1 1 1

= 0 0 0 0 0 1 1 0

Et ensuite appliquer au résultat un décalage à gauche de 4 bits, avec effet de mettre des 0 dans les bits de poids fort, ce qui donnera comme résultat 0 1 1 0 0 0 0 0 La valeur décimale du masque vaut 15.

L’instruction Ruby correspondante est donc (c & 15) « 4

• Les 4 bits de poids faible de a n’ont jamais été sauvegardés, mais ils sont compris entre (0000)2 et(1111)2, soit entre 0 et 15 ; on peut prendre n’importe lequel de ces nombres, on a opté ici pour la moyenne (8), qu’il suffit d’ajouter au résultat précédent.

En résumé, avec le mode direct de Ruby, il faut taper l’instruction ((c & 15) « 4)+8 qui a pour valeur 104. On n’a pas retrouvé 100, mais presque. . .

Avec le tableur Excel, on a besoin de la fonction BITDECALG(nombre;n) qui décale à gauche d’un nombre de n bits.

On construit donc le tableau suivant :

A B

1 c a’

2 22 =BITDECALG(BITET(A2;15);4)+8 qui donne le résultat annoncé :

On peut donc appliquer la méthode à tous les codes de couleur intervenant dans l’imagec pour retrouver une image. . . a0.

Fig. 20 Image a Fig. 21 Image a’

(0,104,0,24) (0,8,0,200)

(0,8,0,8) (0,152,0,104) Fig. 22 Codes image a’

3

3 Annexe : code L

A

TEX

• Pour définir une couleur CMYK, il faut utiliser l’instruction

\definecolor{nom_coul}{cmyk}{x,y,z,t}oùx,y,z ett représentent respectivement les proportions de cyan, magenta, jaune et noir. Mais ces nombres doivent être compris entre 0 et 1, et non entre 0 et 255. Votre serviteur a donc dû faire lui-même les divisons par 255. Ainsi, ce qui devait être par exemple (0,104,0,24) a été encodé

\definecolor{nom_coul}{cmyk}{0,0.596,0,0.407}(3 décimales suffisent largement).

• Pour colorer l’arrière-plan d’une cellule, on utilise l’instruction\cellcolor{nom_coul}, disponible si le packagecolortbla été spécifié dans le préambule :\usepackage{colortbl}

• Voici le code pour réaliser la figure 7 :

\renewcommand{\arraystretch}{4}

\begin{tabular}{p{2cm}p{2cm}}

\cellcolor{coulap11} & \cellcolor{coulap12} \\

\cellcolor{coulap21} & \cellcolor{coulap22} \\

\end{tabular}

\end{verbatim}

\texttt{arraystretch\{4\}} permet d’augmenter la hauteur d’une ligne standard d’un facteur 4 et \texttt{p\{2cm\}} permet de définir la largeur d’une colonne, le tout donnant, à peu de chose près, un carré.

Les quatre couleurs ont été définies dans le préambule~:

\begin{verbatimtab}[4]

\definecolor{coulap11}{cmyk}{0, 0.407, 0, 0.094}

\definecolor{coulap12}{cmyk}{0, 0.031, 0, 0.784}

\definecolor{coulap21}{cmyk}{0, 0.031, 0, 0.031}

\definecolor{coulap22}{cmyk}{0, 0.596, 0, 0.407}

4

4 De la démo à la réalité

L’exemple décrit dans ce qui précède n’a d’intérêt que la compréhension du principe de dissi-mulation puis de reconstruction de la couleur d’un pixel d’une image. Et il est sans intérêt du tout sur une image déjà imprimée.

La sténographie est utile (si on a besoin de camoufler des choses, évidemment) sur des fichiers informatiques qui sont échangés. Pour traiter de tels fichiers, il faut écrire des programmes capables de lire un fichier image, d’en extraire chaque pixel, de traiter chaque pixel (par exemple par la méthode expliquée précédemment) et de reconstituer une nouvelle image ; voilà pour le camouflage. Il faut ensuite le programme pour l’extraction de l’image masquée.

Ce genre de programmation n’est plus tout-à-fait élémentaire et dépasse le cadre de cet article.

La méthode LSB convient bien à des images au format .BMP ; la conversion d’une image d’un format dans un autre (par exemple de .BMP vers .JPG) va annihiler l’éventuelle image camouflée, suite aux algorithmes de compression.

Références

[1] Desbonnez J.-M., Algorithmique élémentaire et Ruby. Losanges, 28, pp. 46 – 55, Mars 2015.

[2] Signac L., Divertissements mathématiques et informatiques. MiniMax, 2011.

Tableur, programmation VBA

Chapitre 20

Le tableur Excel et les macro-instructions (1)

Résumé. Une macro-instruction (« macro » pour les intimes) est un ensemble d’instructions qui permet, d’une part, d’automatiser des tâches répétitives, mais aussi de créer des outils qui permettent à un utilisateur « non initié » d’exploiter un logiciel spécifique (ici le tableur Excel) avec un minimum de connaissances (par exemple cliquer sur un bouton, choisir dans un menu, remplir une boîte de dialogue), et même aussi créer ses propres fonctions. Voici le nécessaire pour débuter et donner envie d’approfondir si affinité.

Avertissement(s)

Le pré-requis est d’avoir déjà manipulé un tableur (ses formules, barres d’outils, menus, etc.). Il s’agira aussi d’apprendre un langage de programmation avec ses structures associées : alterna-tives, répétialterna-tives, et les syntaxes qui lui sont propres. Comme on dit dans les offres d’emplois, une expérience en algorithmique et en programmation est un plus...

Tout choix est un renoncement...les macros sont intimement liées à un environnement ; le choix s’est porté sur Microsoft Excel 2016 pour Mac. Les instructions sont quasi identiques pour Windows, même pour des versions antérieures d’Excel.

Sous Excel, le langage de programmation des macros s’appelle VBA (Visual Basic for Appli-cations) ; avec OpenOffice, la possibilité de créer des macros existe aussi ; le langage s’appelle OpenOffice Basic mais est, à mon sens, beaucoup plus lourd à manipuler.

Pour la petite histoire, Microsoft avait supprimé VBA dans la version Excel 2008, mais l’a rétabli dans la version suivante suite à de nombreuses levées de bouclier.

Quant à la sacro sainte compatibilité entre ce qui se fît, se fait et se fera, elle reste une histoire dont seule l’informatique a le secret.

Il ne s’agira pas de faire un cours complet et complexe sur le langage VBA ; il existe bon nombre de littératures écrites et virtuelles qui traitent de ce sujet. Restons pédagogique...