pierrem69
Nouveau membre
Bonjour
Voilà je veux programmer un petit programme qui "cache" un fichier text dans une image genre .bmp . En fait je veux justement vérifier si ca marche ! C'est à dire si on peut le faire sans modifier l'image de façon visible à l'oeil nu. C'est bien sur inversible pour récuperer... C'est très con et très nul informatiquement mais bon cela peur servir à passer des email sans se faire choper par les RG (encore qu'ils ne faut pas les prendre pour des cons) en passant des secrets caché dans des images anodines...
voici le programme (c'est ultra basique)
[cpp]
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
const
rapport=20;//on veut par exemple remplacer, discretos un pixel sur 20 par un élément du texte
const
debut=1000;//estimation rapide de l'entête d'un fichier au format bmp
char nomtexte[14]="texte.txt";
char nomimage[14]="image.bmp";
char nomsortie[14]="sortie.bmp";
int main(void)
{
ifstream image;
ifstream texte;
ofstream sortie;
char pixel,lettre;
int i=0;
image.open(nomimage);
texte.open(nomtexte);
sortie.open(nomsortie);
for(int j=0;j<debut;j++) //C'est pour ne pas affecter les param du bmp
{
image.get(pixel);
sortie.put(pixel);
};
while(!(image.eof()))
{
i=i++;
if (i==rapport) //la hop on insère le caractère du fichier texte (une fois que i a atteind la valeur "rapport")
{
i=0;
if (!texte.eof())
{
image.get(pixel); //il faut remplacer donc on continu de lire l'image
texte.get(lettre);
sortie.put(lettre);
}
}
else
{
image.get(pixel);//là on fait que copier pixel à pixel image.bmp dans sortie.bmp
sortie.put(pixel);
}
};
image.close();
texte.close();
sortie.close();
return 0;
}
[/cpp]
C'est très simple et pourtant il y un problème :
le booléen image.eof() se vérifie bien avant la fin du fichier image.bmp. j'ai testé et le programme copie bien les 1000 premier caractères du fichier image.bmp sur sortie.bmp sans problème puis ensuite image.eof() est toujours vrai (donc le fichier est considérer comme fini).
Pouvez vous m'aider ? Sur le net je n'ai que des infos sur les anciennes version de eof sur C (EOF) qui posait poblème.
Est un problème de caractère ascii ? ou ai-je fait une grossière erreur ?
Si oui comment lire un fichier octet par octet autrement ?
Voilà je veux programmer un petit programme qui "cache" un fichier text dans une image genre .bmp . En fait je veux justement vérifier si ca marche ! C'est à dire si on peut le faire sans modifier l'image de façon visible à l'oeil nu. C'est bien sur inversible pour récuperer... C'est très con et très nul informatiquement mais bon cela peur servir à passer des email sans se faire choper par les RG (encore qu'ils ne faut pas les prendre pour des cons) en passant des secrets caché dans des images anodines...
voici le programme (c'est ultra basique)
[cpp]
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
const
rapport=20;//on veut par exemple remplacer, discretos un pixel sur 20 par un élément du texte
const
debut=1000;//estimation rapide de l'entête d'un fichier au format bmp
char nomtexte[14]="texte.txt";
char nomimage[14]="image.bmp";
char nomsortie[14]="sortie.bmp";
int main(void)
{
ifstream image;
ifstream texte;
ofstream sortie;
char pixel,lettre;
int i=0;
image.open(nomimage);
texte.open(nomtexte);
sortie.open(nomsortie);
for(int j=0;j<debut;j++) //C'est pour ne pas affecter les param du bmp
{
image.get(pixel);
sortie.put(pixel);
};
while(!(image.eof()))
{
i=i++;
if (i==rapport) //la hop on insère le caractère du fichier texte (une fois que i a atteind la valeur "rapport")
{
i=0;
if (!texte.eof())
{
image.get(pixel); //il faut remplacer donc on continu de lire l'image
texte.get(lettre);
sortie.put(lettre);
}
}
else
{
image.get(pixel);//là on fait que copier pixel à pixel image.bmp dans sortie.bmp
sortie.put(pixel);
}
};
image.close();
texte.close();
sortie.close();
return 0;
}
[/cpp]
C'est très simple et pourtant il y un problème :
le booléen image.eof() se vérifie bien avant la fin du fichier image.bmp. j'ai testé et le programme copie bien les 1000 premier caractères du fichier image.bmp sur sortie.bmp sans problème puis ensuite image.eof() est toujours vrai (donc le fichier est considérer comme fini).
Pouvez vous m'aider ? Sur le net je n'ai que des infos sur les anciennes version de eof sur C (EOF) qui posait poblème.
Est un problème de caractère ascii ? ou ai-je fait une grossière erreur ?
Si oui comment lire un fichier octet par octet autrement ?