STÉGANOGRAPHIE OU COMMENT CACHÉ DU TEXTE DANS UNE IMAGE

Messages postés
328
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
8 mars 2007
- - Dernière réponse : cs_Bidou
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
- 11 mai 2006 à 09:38
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/32615-steganographie-ou-comment-cache-du-texte-dans-une-image

cs_Bidou
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
43 -
Je me suis permis de convertir ton code en C# :
http://www.csharpfr.com/codes/CACHER-TEXTE-DANS-IMAGE_37542.aspx
cs_CloudStrife
Messages postés
12
Date d'inscription
dimanche 10 mars 2002
Statut
Membre
Dernière intervention
14 janvier 2006
-
hum :) très intéressent :P

Par contre, une petite amélioration pourrait être faite :)
Une adaptation a la taille du texte et de l'image :)
Au plus le texte est court au moins il consomme d'octet... hors pourquoi prendre 8bits par pixel sur une image de 1024x768, si le texte fait que 5000 caractères ? :) dans ce cas 1bit suffit plus que largement (puisqu'il permet de codé 96ko dans le fichier).
Et pourquoi pas y planquer complètement un fichier et non que un texte ? :)
paustmart
Messages postés
19
Date d'inscription
dimanche 2 novembre 2003
Statut
Membre
Dernière intervention
26 novembre 2013
-
Extrèmement interessant ce cours sur les images. Merci.
Millenod
Messages postés
35
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
21 septembre 2005
-
@assemple
merci pour les corrections d'orthographe. Même si je connais les règles, j'ai tendance à me laisser aller sur les forums, sans pour autant donner dans un style sms.

@aymenk
Merci, j'avais pas tout à fait vu le tout comme ça. Bien que maintenant, grâce à ton explication, c'était « presque » limpide.
Je ne savais pas la subtilité sur la relation entre bits de poids faibles et couleur.

assemple a d'ailleurs très bien illustré ton explication.


Je vous remercie donc pour votre aide et m?avoir permis de mieux comprendre les subtilités de ce code, et de voir le soutien qu'offrent les membres du site.
assemple
Messages postés
72
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
16 décembre 2011
-
REPONSE à MILLENOD
Tu confonds Bit et Octet
Aymenk bloque le "cryptage" si l'image n'est pas en 24 bits donc :
Pour chaque point :
R G B
xxxxxxxxxxxxxxxxxxxxxxxxxx
x= 0 ou 1
R, G et B variant de 0 à 255,
Un caractère = 1 octet soit xxxxxxxx (x= 0 ou 1)

Le cryptage consiste à altérer R et B de 7/255 soit 2,7%, et B de 4/255 soit 1,5%, et dans la place libérée, stocker les 8 bits de chaque caractère du texte à crypter.
R G B
xxxxx123xxxxx456xxxxxx78
x= 0 ou 1, issus de l'image
1,2,3,4,5,6,7 = 0 ou 1, issus du caractère.
123, comme 456 varie de 0 à 7, tandis que 78 varie de 0 à 4

C'est à peu près ça (ou 8/256 et 5/256 ???)

Le programme de cryptage est pas mal, simple, modifiable...
Mais il eut été mieux que le dpr soit mieux conçu, par exemple en affichant les deux images, sans et avec texte
aymenk
Messages postés
79
Date d'inscription
samedi 25 janvier 2003
Statut
Membre
Dernière intervention
29 octobre 2018
-
Salut Millenod,
Rappelons que dans le type BMP en format 24 bit/pixel, chaque pixel est représenté par
3 octets: un pour le rouge, un pour le vert et un pour le bleu. Chaque octet comporte
8 bits permettant de coder une valeur entière de 0 à 255.
Nous allons cacher un caractère (un octet) dans un pixel.
Nous aurons donc un caractère caché dans chaque point de l'image. Nous devons
répartir les 8 bits d'un octet parmi les 24 bits représentant le pixel. Arbitrairement
nous choisissons d'utiliser:
- les 3 bits de poids faible de l'octet du rouge
- les 3 bits de poids faible de l'octet du vert
- les 2 bits de poids faible de l'octet du bleu

Il est essentiel d'utiliser comme container les bits de poids faible, car ils ont
moins d'influence sur la couleur.
assemple
Messages postés
72
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
16 décembre 2011
-
cacheR : infinitif et non caché.
Pour ne pas faire cette faute il suffit de remplacer le verbe douteux par le verbe FAIRE.
2 exemples puisés dans votre texte, le verbe "cacher" dans 2 contextes. J'y ai remplacé "caché" par "FAIRE" ou "FAIT" :
1) Stéganographie ou comment FAIRE du Texte dans une Image.
2) ...et récuperer le texte FAIT
Millenod
Messages postés
35
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
21 septembre 2005
-
Intéressant ma fois.
je débute et suis pas tout à fait à l'aise dans la manipulation des bits... et je n'y connais rien sur les images bmp.
(quel handicap!!!)


col := MyImage.canvas.Pixels[x, y];
On obteint la couleur d'origine du pixel, au format RGB.
Le format est définit comme tel : PPRRGGBB, avec PP pour la valeur de la palette, le RR pour le rouge, le GG pour le vert, BB pour le bleu

R := getRvalue(col); // extraction du rouge
G := getGvalue(col); // extraction du vert
B := getBvalue(col); // extraction du bleu
on a les intensité des couleurs.

R := R and 248 or (C and 7); // masquage (évident!)
c'est la que ca devient rude.

C and 7 : masque pour obtenir uniquement les valeurs contenu dans les 3derniers bits (GBB)
R and 248 : masque pour obtenir uniquement les valeurs contenu dans les 5premiers bits (PPRRG)

R := R and 248 or (C and 7); on regroupe les valeurs obtenu par les 2 masques dans la nouvelle valeur de R


G := G and 248 or (C and 56) shr 3;
y'a du décalage de bits dans l'air. rude!

(C and 56) : masque pour obtenir uniquement les valeurs contenu dans les bits 6 à 4 (RRG)

(C and 56) shr 3 : on décale ces bits pour les traiter comme si c'était les 3 premiers (GBB)

G and 248 or (C and 56) shr 3 : on regroupe les masques en un nouveau


etc


un texte comprends les caractère dont le code hexa est compris enter $20 (=32) et $7E (=126)
ce qui donne une valeur comprise entre :
00100000 et 01111110

ce qui indique que sur notre pixel, on ne va pas toucher au bit PP

on va coder notre caractère sur les valeurs RRGGBB.

pour la nouvelle valeur de R du code ci-dessus, on ne touchera pas à BB.
....



je pense pas être trop loin de la solution...
mais j'aurais besoin de qq explications en plus.
si l'un de vous veut bien me donner les derniers détails, pour que moi aussi je puisse etre illuminé par la beauté de ce code, et surtout sa subtilité :)


merci beaucoup de m'avoir fait creuser le ciboulot :)
japee
Messages postés
1715
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
2 décembre 2019
2 -
Très intéressant, ce code, aymenc.

Pour les lignes :

R := R and 248 or (C and 7); // masquage (évident!)
G := G and 248 or (C and 56) shr 3;
B := B and 252 or (C and 192) shr 6;

ton commentaire quant au masquage ("évident") démontre une belle maîtrise des mathématiques.
Félicitations !
Ceux qui sont moins brillants que toi auront un bon sujet de réflexion pour les vacances ! ;)

Bonne continuation.

japee
cs_bloom1
Messages postés
328
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
8 mars 2007
-
Comment tu fais pour crypter du texte dedans ?
DRJEROME
Messages postés
436
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
5 février 2015
-
Ben...moi j'ai pas encore essayé... mais bravo à l'avance ;)
gildeplomb
Messages postés
92
Date d'inscription
samedi 29 décembre 2012
Statut
Membre
Dernière intervention
20 octobre 2019
-
Euh si ca fonctionne tres bien

Bravo
cs_bloom1
Messages postés
328
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
8 mars 2007
-
Euh, ca fonctionne pas !