kodowanie w mapie bitowej

0

mam taki programik ciekawy... podobno koduje tekst w mapie bitowej... mogłby ktoś "rzucic okiem" i powiedziec o co mniej wiecej chodzi w tym programiku [???] jakby sie komus chcialo... :-/

//----------------------------------------------------------------

TForm1 *Form1;
long dl_max=0;      //max dł wiad w bitach
//-------------------------------------------------------------------------
TColor TForm1::zakoduj(bool b1,bool b2, bool b3, TColor c)
{
 long rob=1;
 rob=rob<<8;
 rob+=1;
 rob=rob<<8;
 rob+=1;
 c = c | rob;  //pierwszy, dziewiąty i siedemnasty bit w c jest jedynką
 rob = 0xFE;
 rob+=b3;
 rob=rob<<8;
 rob+=0xFE;
 rob+=b2;
 rob=rob<<8;
 rob+=0xFE;
 rob+=b1;
 c = c & rob;
 return c;
}
//-----------------------Kodowanie----------------------------------------
void __fastcall TForm1::Koduj1Click(TObject *Sender)
{
 long dl_wiad = Memo1->Lines->Text.Length();
 Label5->Caption=IntToStr(dl_wiad);
 if(dl_wiad<=dl_max)
 {
  //ukrywanie informacji w obrazku
  long i=0,j=0; //współrzędne bieżącego piksela
  char znak;
  int bp=0;     // ilosc bitow przeniesionych (niezakodowanych) z poprzedniego znaku
  long szer=i1->Picture->Bitmap->Width;
  long wys=i1->Picture->Bitmap->Height;
  TColor piksel;
  bool b1,b2,b3;
  for(int k=1;k<=dl_wiad;k++)
  {
   piksel=i1->Picture->Bitmap->Canvas->Pixels[i][j];
   znak=Memo1->Lines->Text[k];
   if(bp==0) //o bitów przeniesionych
   {
    b1=znak%2;
    znak/=2;
    b2=znak%2;
    znak/=2;
    b3=znak%2;
    znak/=2;
    i1->Picture->Bitmap->Canvas->Pixels[i][j]=zakoduj(b1,b2,b3,i1->Picture->Bitmap->Canvas->Pixels[i][j]);
    i++;
    if (i>szer) {i=0; j++;}
    b1=znak%2;
    znak/=2;
    b2=znak%2;
    znak/=2;
    b3=znak%2;
    znak/=2;
    i1->Picture->Bitmap->Canvas->Pixels[i][j]=zakoduj(b1,b2,b3,i1->Picture->Bitmap->Canvas->Pixels[i][j]);
    i++;
    if (i>szer) {i=0; j++;}
    b1=znak%2;
    znak/=2;
    b2=znak%2;
    bp=2;
   }
   else if(bp==1)
   {
    b2=znak%2;
    znak/=2;
    b3=znak%2;
    znak/=2;
    i1->Picture->Bitmap->Canvas->Pixels[i][j]=zakoduj(b1,b2,b3,i1->Picture->Bitmap->Canvas->Pixels[i][j]);
    i++;
    if (i>szer) {i=0; j++;}
    b1=znak%2;
    znak/=2;
    b2=znak%2;
    znak/=2;
    b3=znak%2;
    znak/=2;
    i1->Picture->Bitmap->Canvas->Pixels[i][j]=zakoduj(b1,b2,b3,i1->Picture->Bitmap->Canvas->Pixels[i][j]);
    i++;
    if (i>szer) {i=0; j++;}
    b1=znak%2;
    znak/=2;
    b2=znak%2;
    znak/=2;
    b3=znak%2;
    znak/=2;
    i1->Picture->Bitmap->Canvas->Pixels[i][j]=zakoduj(b1,b2,b3,i1->Picture->Bitmap->Canvas->Pixels[i][j]);
    i++;
    if (i>szer) {i=0; j++;}
    bp=0;
   }
   else //bp=2
   {
     b3=znak%2;
     znak/=2;
     i1->Picture->Bitmap->Canvas->Pixels[i][j]=zakoduj(b1,b2,b3,i1->Picture->Bitmap->Canvas->Pixels[i][j]);
     i++;
     if (i>szer) {i=0; j++;}
     b1=znak%2;
     znak/=2;
     b2=znak%2;
     znak/=2;
     b3=znak%2;
     znak/=2;
     i1->Picture->Bitmap->Canvas->Pixels[i][j]=zakoduj(b1,b2,b3,i1->Picture->Bitmap->Canvas->Pixels[i][j]);
     i++;
     if (i>szer) {i=0; j++;}
     b1=znak%2;
     znak/=2;
     b2=znak%2;
     znak/=2;
     b3=znak%2;
     znak/=2;
     i1->Picture->Bitmap->Canvas->Pixels[i][j]=zakoduj(b1,b2,b3,i1->Picture->Bitmap->Canvas->Pixels[i][j]);
     i++;
     if (i>szer) {i=0; j++;}
     b1=znak%2;
     bp=1;
   }
  }
  i1->Picture->Bitmap->Canvas->Refresh();
 }
 else
 MessageDlg("Za długa wiadomość!",mtError,TMsgDlgButtons()<<mbYes,0);
 }

//-----------------------Dekodowanie-------------------------------------
void __fastcall TForm1::Dekoduj1Click(TObject *Sender)
{
 MOdkodowane->Clear();
 AnsiString wynik="";
 long dl_wiad=StrToInt(Label5->Caption);
 long i=0,j=0,rob=0;
 char zn=0;
 bool b1,b2,b3;
 TColor c;
 int ile=0; //ile bitów zapisano w zn
 for(int k=1;k<=dl_wiad*8/3;k++)
 {
  c=i1->Picture->Bitmap->Canvas->Pixels[i][j];    //czytamy piksel
  b1=c%2;                                         //czytamy bit z B
  rob+=b1;
  rob=rob<<ile;
  zn=zn | rob;
  rob=0;                                      //dodajemy go do znaku
  ile++;
  if (ile==8)                          // jeśli znak jest pełny(8 bitów)
    {wynik+=zn;  ile=0; zn=0;}         //dopisujemy go do wyniku
  c=c>>8;
  b2=c%2;
  rob+=b2;
  rob=rob<<ile;
  zn=zn | rob;                                        //dodajemy go do znaku
  rob=0;
  ile++;
  if (ile==8)
    {wynik+=zn; ile=0; zn=0;}
  c=c>>8;
  b3=c%2;
  rob+=b3;
  rob=rob<<ile;
  zn=zn | rob;                                      //dodajemy go do znaku
  rob=0;
  ile++;
  if (ile==8)
    {wynik+=zn; ile=0; zn=0;}
  i++;
  if (i>i1->Picture->Bitmap->Width) {i=0; j++;}
 }
 MOdkodowane->Lines->Text=wynik;

 Label11->Caption=IntToStr(MOdkodowane->Lines->Text.Length());
}
//-------------------------------------------------------------------------
0

Zmien temat, bo pewnie znowu poleci.

pozdrawiam
johny

0

dzięki za radę [green] może masz jakiś pomysł na temat bo mi nic do głowy nie przychodzi ;]

0

Szczerze mowiac nie mam ani checi ani czasu analizowac calego - jakby byl jakis kawalek, albo funkcja to co innego.

pozdrawiam
johny

0

:| "kodowanie w mapie bitowej"
chyba mówi trochę więcej niż "kodowanie?? help me!!!" :-D

0
ciapek888 napisał(a)

:| "kodowanie w mapie bitowej"
chyba mówi trochę więcej niż "kodowanie?? help me!!!" :-D

chyba masz rację ;-) niech więc się stanie :>

0

Kodowanie tekstu w bitmapie nazywa się steganografią, a skoro masz kod do tego i nie wiesz, o co w nim biega, to obstawiam, że potrzebujesz tego na uczelnię/do szkoły i nie wysiliłaś się, by włożyć w niego pracę.

0

Po chwili przypatrzenia się powyższy kod jest bardzo, jakby to powiedzieć, nieprofesjonalny, chciażby ze względu na 3x powtórzenie kilkunastu linijek kodu, zapewne pisął go jakiś newbie i osiągnął swój cel jak na swoje możliwości :). Prawdopodbnie chodzi tu o kodowanie ciągu znaków w ciąg piksli (pikseli?), żadna steganografia.

0

próbowałam skrócić ten kod ale po skróceniu mi nie działa :-/ juz wiem o co w nim chodzi... ;]

1 użytkowników online, w tym zalogowanych: 0, gości: 1