Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

STEGANOGRAPHIE: BMPSTEGANO, CACHER DES DONNÉES DANS UN BITMAP 24 BITS [DEV-C++ 4]


Information sur la source

Catégorie :Sécurité & Cryptage Niveau : Débutant Date de création : 23/03/2004 Date de mise à jour : 24/03/2004 18:48:00 Vu / téléchargé: 2 564 / 349

Note :
7 / 10 - par 2 personnes
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (18)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Programme en anglais.
-Cache des données (fichier, texte saisi manuellement)
-Retrouve et affiche ou asuvegarde ces données
-Altération de l'image de 6% maximum au niveau coloration ;-p
-Focntionne uniquement sur des bitmaps 24 bits non compressés (évidemment)
-Source commentée (en anglais approximatif :-D)

Développé avec Dev-C++ => conio.c, désolé pour les puristes je suis un flemmard
Pour ceux que ca intérese/rebute: 749 lignes, dont 617 de code
 

Source

  • //cf. le .zip
  • // y'a aussi le fichier projet Dev-C++
//cf. le .zip
// y'a aussi le fichier projet Dev-C++

Conclusion

Aucune garantie n'est fournie. Vous serez sympa de me prévenir de tout bug ou de toute amélioration si vous le redistribuez. Vos remarques sont les bienvenues, etc.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • main.cppTélécharger ce fichier [Réservé aux membres club]Voir ce fichier22 415 octets
  • stegano.devTélécharger ce fichier [Réservé aux membres club]836 octets

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de djl le 23/03/2004 14:48:52

pas mal, ca marche bien :), dommage que ca melange c et c++...

this->...  c'est pour plus de clarté ca?

signaler à un administrateur
Commentaire de LordBob le 23/03/2004 17:53:45

ton programme est pas mal, mais pourquoi faire des commentaires en anglais?

signaler à un administrateur
Commentaire de street_pc le 23/03/2004 18:49:00

djl > oui c'est pour plus de clarté (surtout pour moi) et une habitude que je partage avec le php ;-p. je suis très désordonné pour le c/c++ car j'ai appris les deux en même temps et je ne fais pas toujours la différence. Je fais s'évanouir les rigoureux

LordBob > initialement, j'avais prévu cette source entre autres pour un ami avec qui je parle anglais...

signaler à un administrateur
Commentaire de MetalDwarf le 24/03/2004 17:32:03

Je viens de regarder ton code ca me semble beaucoup trop long pour ce que ca fait.
J ai publie sur ce site un code qui fait la meme chose mais avec n importe quel fichier (a cacher) dans un fichier BMP 24bits non compressee et c etait beaucoup plus court, et portable (windows et linux).

Le code etait nettement plus court!!!

http://www.cppfrance.com/code.aspx?ID=10081

En particulier tu n as pas besoin de faire tant de manipulations avec le header!! Le codage etait plus discret, car seul 1 bit sur un octet etait modifie et c est le bit de poids faible.

signaler à un administrateur
Commentaire de street_pc le 24/03/2004 17:55:36

>Trop long: oui en effet, je l'ai fait dans le souci du détail, avec vérifications, infos sur l'en-tête etc.
De plus je l'ai fait non pas pour être utile en tant que programme de stégano (il en existe des bien mieux), mais juste pour donner des exmples et faire un programme complet (vérification aux plus de niveau possible, plus d'options, sauvegarde du nom de fichier, etc.)

>"MAIS avec n'importe..." uhu ? moi aussi il accepte n'importe quel fichier non ? le mode texte manuel n'est qu'un choix.

>"Le codage etait plus discret, car seul 1 bit sur un octet etait modifie et c est le bit de poids faible." certes, mais la place disponible est alors divisée par 4... Lorsque j'aurais le temps (sans doute pas avant les vacances), je laisserai le choix: plus la taille du fichier à cacher sera faible, plus le codage sera discret.

Mon intention n'était pas de concurrencer ton programme, sans doute avantagé par sa légerté et sa portabilité, mais de fournir cette source aux visiteurs de ce site.

signaler à un administrateur
Commentaire de MetalDwarf le 24/03/2004 18:01:03

Je sais bien que ton programme verifie plus de choses, mais le probleme c est que la difference de coloration peut faire un peu tache avec ton codage, paske 4 bits ca fait 16 valeurs sur 255, et si tu le repete sur 3 valeurs ca peut faire une difference assez importante.

Voila je precise quand meme que ce n etait pas mechant tout ce que j ai pu dire, mais de simples remarques. D ailleurs moi aussi j avais du mal entre C/C++ au debut... ;-)

signaler à un administrateur
Commentaire de street_pc le 24/03/2004 18:13:34

Commme déjà dit, mon programme n'a pas pour réelle vocation de cacher un fichier de la façon la plus efficace possible, mais plutôt de le faire en C++. C'est à la base un programme-exemple...
Et l'altération n'est pas si importante. Celà dit, c'est peut-être pour ceci que j'ai dit que je tenterais de faire le meilleur rapport taille/codage.

signaler à un administrateur
Commentaire de Kirua le 24/03/2004 18:13:55

impeccable, j'ai testé (ah, corrige le aborded de fin de code, c'est "aborted", minime mais c mieux ;-))

mon avis: vrmnt bon! j'ai caché tt le code source (main.cpp) dans une image bmp et on ne voit pas la différence, vrmnt. l'extraction c déroulée sans aucun problème (il semble qu'aucun caractère n'ait été modifié). tu devrais rajouter une option: possiblité de choisir le nom du fichier de sortie, et n'utiliser le nom d'origine que comme valeur par défaut (si rien n'est précisé).

une remarque: si on lance le programme sans option ça devrait appeler l'aide. pour l'instant ça génère une erreur.

bonne continuation!

PS: met tout ton code d'exploitation de BMP dans une classe, c'est bcp plus pratique et réutilisable. change tes macros min et max par des fonction inline ;-)

inlince double max(double a, double b)
{
return a>b ? a : b ;
}

et tu la surcharges pour les int, les float, les char, etc...
ça présente bcp d'avantages, mais j'ai pas le temps là.

ciao

signaler à un administrateur
Commentaire de street_pc le 24/03/2004 18:51:12

merci de ton commentaire, je suis flatté.
pour des raisons propres (toujours d'exemple), je vais garder les macros min et max.
j'ai par contre corrigé la faute d'orthographe et lancer le programme sans paramètre ne donne plus d'erreur.
quant au nom de sortie, je le ferai sans doute lorsque j'aurais le temps

signaler à un administrateur
Commentaire de Kirua le 24/03/2004 20:47:24

après avoir lu ton code j'ai décidé d'écrire une classe de lecture de BMP (ça peut tjs servir ^^)
J'ai codé sans ennui le débu (lecture de l'en-tête, je me suis basé sur un document de WotSit.org) mais je ne comprends pas ceci:

après toute une série de données (dernier élément: Important Colors), j'ai Palette (N * 4 octets) et puis Données (x octets, ça dépend de plusieurs facteurs, compression, dimensions etc)

Bon, mais ... comprends pas pq la Palette utilise 4 octets par élément! (ça devrait dépendre du nb d'octets par pixel non?). A quoi sert le 4ème octet? Et puis, comment j'attribue les indices ds la palette?

Je pensais qu'en BMP il n'y avait pas de palette, je ne comprends pas vrmnt l'intérêt pr un format comme celui-ci, qui ne doit pas limiter les couleurs. Tu peux m'éclaircir sur le contenu des BMP à partir de la palette? merci ;-)

signaler à un administrateur
Commentaire de MetalDwarf le 24/03/2004 21:07:29

C est simple. La palette occupe 4 octets car il y en a un par composante (RGB) et le 4e est un octet alpha, c est a dire qui definit la transparence de la couleur.
Il y a une palette en BMP mais...pas toujours. En fait si tu n es pas en 24 bits, il y a une palette. Par exemple si tu es en 8 bits (mais en couleurs, parce que en 24 bits N&B il n y en a pas), ta palette comporte 256 entrees, et apres les donnees sont des indices dans cette table. Ca permet de choisir 256 couleurs parmi 16,9 millions.
C est tout ce dont je me souviens a propos des BMP, et meme si je ne suis pas le destinataire de cette requete j espere t avoir aide.

signaler à un administrateur
Commentaire de Kirua le 24/03/2004 21:10:13

Tu m'as aidé en effet :-) merci pour cette réponse tout à fait claire.
Puisque je ne m'occupe que d'images 24 bits, il n'y a pas de palette du tout je suppose, donc j'attaque directement les pixels 3 octets à la fois (et en commençant par la ligne du dessous), ou bien il y a qd même qq octets à passer à l'endroit où aurait dû être la palette?

signaler à un administrateur
Commentaire de street_pc le 24/03/2004 23:26:56

Honnêtement je ne sais pas si les 24 bits impliquent une absence de palette, mais tu peux le savoir avec la valeur de iDataOffset: début des données (pixels)...

signaler à un administrateur
Commentaire de lunarossa le 09/06/2005 12:12:55

bonjour, j'ai plein d'erreur wuand je le compile (avec dev-c++ 4.9.9.2) du genre :

`BYTE' does not name a type
In function `bool bPrintHeaderInfo(s_BMPHeader*)':
`clrscr' undeclared (first use this function)

etc ....

merci de m'aider

signaler à un administrateur
Commentaire de Kirua le 09/06/2005 14:21:10

une palette avec 24 bits ... ça fait bcp de couleurs à définir, alors qu'une couleur est pleinement définie par ses 3 * 8 bits! ce serait totalement absurde de faire une palette pour les 24 bits.

signaler à un administrateur
Commentaire de street_pc le 09/06/2005 19:13:57

lunarossa vérifie que tu as bien conio.h

kirua tu ne fais pas une "palette 24 bits"
dans une palette, si ma mémoire est bonne, tu définis 256 couleurs, chacune sur 32 bits (RVB + alpha). ensuite, tu utilise un seul octet par pixel, désignant le numéro de la couleur (de 0 à 255, soit 256 possibilités)
une page que j'ai lue pour ce petit prog :
http://www.commentcamarche.net/video/format-bmp.php3

signaler à un administrateur
Commentaire de Kirua le 09/06/2005 19:41:57

Oui bah ça va j'ai bien compris le système des palettes qd même hein ;) Mais à moins que je n'aies pas compris, il émettait un doute quant au fait que les BMP 24 bits aient ou pas une palette. Sinon, pour l'histoire du DataOffset, de fait, il faut l'utiliser, c'est pas pour rien ;)

signaler à un administrateur
Commentaire de street_pc le 09/06/2005 19:58:38

désolé je n'avais pas compris que tu avais compris (ou était-ce l'inverse ?) :p
mais maintenant e comprends pourquoi je ne comprends pas :D

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,343 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.