Dies ist mein erstes Mal hier eine Frage zu stellen, also ertragen Sie mit mir! Ich habe ein Steganographie-Labor, mit dem ich fast fertig bin. Ich habe ein Programm abgeschlossen, das eine Nachricht in den unteren Bits eines Bildes versteckt, aber das Programm, um das Bild zu extrahieren, ist, wo ich feststecke. Das Bild befindet sich in einer Datei, die als 2D-Matrix, Spaltenhauptordnung, dargestellt wird. Also hier ist der Code, wo ich feststecke.C++ Extrahieren eines Zeichens aus einem Bild mit bitweisen Operationen
void image::reveal_message()
{
int bitcount = 0;
char c;
char *msg;
while(c != '\0' || bitcount < 1128)
{
for(int z = 0; z < cols; z++)
{
for(int k = 0; k < 8; k++)
{
int i = bitcount % rows ;
int j = bitcount/rows ;
int b = c & 1;
if(img[i][j] % 2 != 0 && b == 0)
{
c = c & (~1);
}
else if(img[i][j] % 2 == 0 && b == 1)
{
c = c | 1;
}
bitcount++;
c = c << 1;
}
reverse_bits(c);
cout << c << endl;
//strncat(msg, &c, 1);
}
}
int i = 0;
for(int i = 0; i < cols; i++)
{
if(!isprint(msg[i]))
{
cout << "There is no hidden message" << endl;
}
}
cout << "This is the hidden message" << endl;
cout << msg;
}
Der Code ist in der Lage, durchzulaufen und die richtige Zahl für die Bits zu erfassen. Die Bits basieren darauf, ob die Zahl in der Matrix ungerade oder gerade ist. Wo ich Probleme habe, setze ich die Bits des Chars tatsächlich auf die Bits, die ich aus der Matrix extrahiert habe. Ich bin nicht der Beste bei bitweisen Operationen, und wir sollten auch keine Bibliothek dafür verwenden. Die reverse_bits-Funktion funktioniert auch, so dass es scheint, nur meine Verschiebungen und Bit-weise Operationen sind durcheinander. Ich habe auch die strcat() Zeile auskommentiert, weil es viele Fehler aufgrund der Tatsache, dass Char c ist falsch produziert . Auch der Hauptfehler, den ich bekomme, ist Segmentation Dump.
Dank einer Tonne hilft das wirklich! –