[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...


Anmelden zum Antworten