[Steganographie] Probleme beim Auslesen
-
Moin erstmal,
und zwar schreib ich grade ein Programm was Text in einem Bild versteckt und danach wieder auslesen soll (Steganographie).Mein Problem dabei ist, dass ich nich den Text herausbekomme den ich reinschreibe.
Hier mein code zum Text reinschreiben:AnsiString text = Memo1->Text; int stringlenght = text.Length(); // String Länge auslesen int Pixelfarbwert, xpos = 0, ypos = 0; Zeichen = Memo1->Text+"@!"; //abbruchkriterium reinschreiben for (int i=1; i <= Zeichen.Length();i++) { Memo2->Text = Memo2->Text+(IntegerzahlToBinaerstring((Zeichen[i])))+ ' '; //in ASCII umwandeln & Binär } for(int k=1;k<=stringlenght;k++) // Schleife solang wie Textlänge { for (int i=0; i<=7; i++) //Schleife in Bit Größe von 0..7 { if (i==0) //Pixel 1 für 3 Bits { // Abfrage der x Koordinatenlänge if (xpos == Image1->Picture->Width-1) //Wenn Xpos die max Bildweite erreicht hat { xpos = 0; // Setze x = 0 und y wird um 1 erhöht. ypos++; } Pixelfarbwert = Image1->Canvas->Pixels[xpos][ypos]; } if (i==3) //Pixel 2 für 3 Bits { if (xpos == Image1->Picture->Width-1) //Wenn Xpos die max Bildweite erreicht hat { xpos = 0; // Setze x = 0 und y wird um 1 erhöht. ypos++; } Image2->Canvas->Pixels[xpos][ypos] = Pixelfarbwert; //Schreibt Farbwerte der 1ten 3 Bits xpos++; Pixelfarbwert = Image1->Canvas->Pixels[xpos][ypos]; } if (i==6) { if (xpos == Image1->Picture->Width-1) //Wenn Xpos die max Bildweite erreicht hat { xpos = 0; // Setze x = 0 und y wird um 1 erhöht. ypos++; } Image2->Canvas->Pixels[xpos][ypos] = Pixelfarbwert; //Schreibt Farbwerte der 2ten 3 Bits xpos++; Pixelfarbwert = Image1->Canvas->Pixels[xpos][ypos]; } // LSB setzen int LSB = 1, j = 0; while (j < (i % 3)) { LSB = LSB << 8; j++; } // Farbwert neu setzen if (((int)pow(2,i) & text[k]) != 0) { Pixelfarbwert = Pixelfarbwert | LSB; } else { Pixelfarbwert = Pixelfarbwert & ~LSB; } if (i==7) { //Schreibt Farbwerte der letzen 2 Bits Image2->Canvas->Pixels[xpos][ypos] = Pixelfarbwert; xpos++; } } // Ende der 2ten For-Schleife } // Ende der 1ten For-Schleife }
Und hier der Code zum auslesen:
int Pixelfarbwert,schieben=-1; String text; char teil; for (int h=0;h < Image2->Picture->Bitmap->Height-1;h++) { for (int w=0;w < Image2->Picture->Bitmap->Width-1;w++) //ein Zeichen holen { schieben++; //erstes pixel Pixelfarbwert = Image2->Canvas->Pixels [w][h]; if ((Pixelfarbwert&(1<<0))!=0 == true) //auslesende stelle { teil|=(1<<schieben); } else { teil&=~(1<<schieben); } if (schieben == 7) { schieben =-1; if (w == Image1->Picture->Bitmap->Width-1) { schieben=0; h++; w=0; } else{w++;schieben=0;} text= text + teil; if (text.Length()>1) { if (text[(text.Length()-1)] == '@' && text[(text.Length())]== '!') //abbruchkriterium { text.Delete((text.Length()-1),2); //abbruchbares löschen Memo3->Text=text; return; } } } schieben++; //zweites pixel Pixelfarbwert = Image2->Canvas->Pixels [w][h]; if ((Pixelfarbwert&(1<<8))!=0 == true) //auslesende stelle { teil|=(1<<schieben); } else { teil&=~(1<<schieben); } if (schieben == 7) { schieben =-1; if (w == Image1->Picture->Bitmap->Width-1) { schieben=0; h++; w=0; } else{w++;schieben=0;} text= text + teil; if (text.Length()>1) { if (text[(text.Length()-1)] == '@' && text[(text.Length())]== '!') //abbruchkriterium { text.Delete((text.Length()-1),2); //abbruchbares löschen Memo3->Text=text; return; } } } schieben++; //drittes pixel Pixelfarbwert = Image2->Canvas->Pixels [w][h]; if ((Pixelfarbwert&(1<<16))!=0 == true) //auslesende stelle { teil|=(1<<schieben); } else { teil&=~(1<<schieben); } if (schieben == 7) { schieben =-1; if (w == Image1->Picture->Bitmap->Width-1) { schieben=-1; h++; w=0; } else{w++;schieben=-1;} text= text + teil; if (text.Length()>1) { if (text[(text.Length()-1)] == '@' && text[(text.Length())]== '!') //abbruchkriterium { text.Delete((text.Length()-1),2); //abbruchbares löschen Memo3->Text=text; return; } } } } Memo3->Text = text; } }
Hoffe jemand kann mir helfen
/Edit akari : code-Tags in cpp-Tages geändert. Bitte beim nächsten mal die cpp-Tags verwenden!
-
Mach mal ein Screenshot von dem Bild mit dem Text und poste das mal hier...