Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Steganografia w BMP
Reigon
post
Post #1





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 19.10.2004

Ostrzeżenie: (0%)
-----


Mam do napisania aplikacje, ktora ma zakodowac informacje (text) w grafice np. BMP lub tez innym formacie, np. w wav, mpeg, itp. Generalnie polega to na tym, ze nalezy zmieniac najmniej znaczacy bit w kazdym pikselu (jesli chodzi o obrazek), tak aby obrazek zachowal oryginalny wizerunek (a przynajmniej zmiany byly nie dostrzegalne dla ludziego oka). Zaproponowano mi napisanie tego w Visual C++, C#, Javie lub Delphi... Wpadlem na pomysl, ze ciekawym rozwiazaniem bylo by napisanie tego w php i umieszczenie gdzies w necie (wtedy ktokolwiek by zakodowal z takiej strony ten obrazek, moglby informacje odkodowac rowniez spod danego url'a). Wtedy obydwie strony nie musialby posiadac odpowiedniego oprogramowania na dysku. Ale czy jest to w ogole mozliwe ? Jak nalezaloby podejsc do tej sprawy ? Na pewno trzeba by bylo skorzystac z funkcji czystego C (fopen, pozniej obejsc jakos naglowek BMP, pozniej zabawa z wskaznikami chyba), wtedy moze by to bylo wykonalne. Wiecej o Steganografi znajdziecie tutaj.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
rogrog
post
Post #2





Grupa: Zarejestrowani
Postów: 602
Pomógł: 1
Dołączył: 3.04.2004
Skąd: Trójmiasto (Gdańsk)

Ostrzeżenie: (0%)
-----


no ja to widzę tak:

1. Wczytujesz dane za pomocą np. fopen" title="Zobacz w manualu PHP" target="_manual, fgets" title="Zobacz w manualu PHP" target="_manual - funkcje są binarnie bezpieczne oczywiscie..., możesz dodać flagę b do fopen (więcej w manualu) - równie dobrze a nawet lepiej możesz użyć file_get_contents" title="Zobacz w manualu PHP" target="_manual
2. parsujesz plik zgodnie ze specyfikacją BMP czy też DIP - to na pewno znasz jak sie tym zajmujesz... jak coś to google. Wczytujesz dane do stringów (nagłówki) i tablic (kolory i piksele)
3. wykonujesz te swoje operacje steganograficzne na wczytanych tablicach
4. z powrotem tworzysz plik bmp (łączysz nagłówki i implode" title="Zobacz w manualu PHP" target="_manualowane tablice) i już (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

chyba nic szczególnie odkrywczego (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

PS. wskaźników nie ma w php
Go to the top of the page
+Quote Post
bela
post
Post #3


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

Ostrzeżenie: (0%)
-----


@lunter: jestes pewien że biblioteka gd wspiera bmp ?
Go to the top of the page
+Quote Post
Reigon
post
Post #4





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 19.10.2004

Ostrzeżenie: (0%)
-----


BMP nie wspiera, ale w PNG to moze byc nawet bardziej uzyteczne, bo kto w sieci posluguje sie bmp...a taki png mniejsze podejrzenia wzbudza, poza tym ogolnie program taki napisany w php i udostepniony w I-necie daje wieksze mozliwosci niz czysta aplikacja, np. w C#.

lunter -> gorzej bedzie, jak prowadzacy zabroni uzywac bibliotek i np. kaze wlasne napisac :/ jutro sie popytam

rogrog -> tez myslalem o tych tablicach :]

BTW: Dzieki wszystkim za jakiekolwiek odpowiedzi, myslalem, ze tego tematu nikt nie ruszy ;p Jednak zostalem mile zaskoczony, moze ktos jeszcze cos dopowie od siebie ?

Ten post edytował Reigon 19.10.2004, 22:27:26
Go to the top of the page
+Quote Post
theoden
post
Post #5





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 21.03.2004
Skąd: Radom

Ostrzeżenie: (0%)
-----


Cytat(rogrog @ 2004-10-19 22:28:43)
PS. wskaźników nie ma w php

Wskaźniki są tyle że ich nie widać;)))) (IMG:http://forum.php.pl/style_emoticons/default/cool.gif)

Ten post edytował theoden 19.10.2004, 23:34:23
Go to the top of the page
+Quote Post
rogrog
post
Post #6





Grupa: Zarejestrowani
Postów: 602
Pomógł: 1
Dołączył: 3.04.2004
Skąd: Trójmiasto (Gdańsk)

Ostrzeżenie: (0%)
-----


Cytat(theoden @ 2004-10-20 00:33:21)
Wskaźniki są tyle że ich nie widać (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

ok, zdawało mi się że mówimy o programowaniu w php a nie programowaniu silnika php (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Cytat(Reigon)
myslalem, ze tego tematu nikt nie ruszy ;p

na tym forum ciekawe tematy zawsze znajdą popularność (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) szczególnie że ludzie są już znudzeni odpowiadaniem na ciągle te same pytania początkujących (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
Reigon
post
Post #7





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 19.10.2004

Ostrzeżenie: (0%)
-----


Cytat(rogrog @ 2004-10-20 14:40:43)
na tym forum ciekawe tematy zawsze znajdą popularność (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) szczególnie że ludzie są już znudzeni odpowiadaniem na ciągle te same pytania początkujących (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

No to super, tyle, ze ja zaden PRO user nie jestem, dlatego przydalyby mi sie zrodla, ktorych lunter nie moze znalezc (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Dzisiaj zagadalem do prowadzacego, generalnie na to przystal, aby to kodowac w PNG i zeby bylo to w php, tylko jako, ze bedzie to aplikacja klient-serwer, tak czy siak przesylamy tresc siecia...a wiec nie do konca jest to tak, jak powinno byc (bo nota bene tresc bedzie az tak bezpieczna)...zaproponowal SSL lub cos tam jeszcze... - no ale z tym chyba zadnego problemu nie powinno byc. Zabieram sie w piatek lub pon. do pisania, pisac do struk. czy obiektowo ? Z obiektowym php raczej nie mialem stycznosci, ale jak polepszy kod i dzialanie, to mozemy postawic sobie wyzwanie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
theoden
post
Post #8





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 21.03.2004
Skąd: Radom

Ostrzeżenie: (0%)
-----


Cytat(Reigon @ 2004-10-20 17:21:58)
Zabieram sie w piatek lub pon. do pisania, pisac do struk. czy obiektowo ? Z obiektowym php raczej nie mialem stycznosci, ale jak polepszy kod i dzialanie, to mozemy postawic sobie wyzwanie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

To zależy jeżeli bawiłeś się OOP w innym języku to pewnie i tu sobie poradzisz jak nie to zawsze można się nauczyć (IMG:http://forum.php.pl/style_emoticons/default/cool.gif)

Wady i zalety obu podejść - pełno tego na forum poszukaj.

Ten post edytował theoden 20.10.2004, 21:23:18
Go to the top of the page
+Quote Post
Reigon
post
Post #9





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 19.10.2004

Ostrzeżenie: (0%)
-----


Cytat(theoden @ 2004-10-20 20:22:50)
Cytat(Reigon @ 2004-10-20 17:21:58)
Zabieram sie w piatek lub pon. do pisania, pisac do struk. czy obiektowo ? Z obiektowym php raczej nie mialem stycznosci, ale jak polepszy kod i dzialanie, to mozemy postawic sobie wyzwanie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

To zależy jeżeli bawiłeś się OOP w innym języku to pewnie i tu sobie poradzisz jak nie to zawsze można się nauczyć (IMG:http://forum.php.pl/style_emoticons/default/cool.gif)

Wady i zalety obu podejść - pełno tego na forum poszukaj.

Chodzilo mi o wady i zalety podejsc do tego konkretnego programu...bo ogolnie to wiem co i jak (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
rogrog
post
Post #10





Grupa: Zarejestrowani
Postów: 602
Pomógł: 1
Dołączył: 3.04.2004
Skąd: Trójmiasto (Gdańsk)

Ostrzeżenie: (0%)
-----


szczerze mowiac w tym konkretnym przypadku na poziomie samej podmiany bitów nie widzę szczególnych zalet z obiektówki...
Go to the top of the page
+Quote Post
zYm3N
post
Post #11





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 29.08.2004
Skąd: POLAND

Ostrzeżenie: (0%)
-----


moja stronka, dział portfolio.

Jeśli potrzebujesz kodów, pisz. (zymen@zymen.net).

Co prawda w c++, ale zbyt mocno to się nie różni.
Go to the top of the page
+Quote Post
Reigon
post
Post #12





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 19.10.2004

Ostrzeżenie: (0%)
-----


Program zaliczony, podaje zrodla, moze kiedys sie komus przydadza, algorytm kodowania:

  1. <?
  2.  $i=2; // w ile bitow wstawiac, od 1 do 8
  3.  
  4.  $im=imagecreatefrompng('1.png');
  5.  $ix=imagesx($im);$iy=imagesy($im);
  6.  
  7.  $t=file_get_contents('1.txt');
  8.  $s='';for($z=0;$z<strlen($t);$z++){$s.=str_pad(decbin(ord($t[$z])),8,'0',STR_PAD_LEFT);}
  9.  
  10.  $q=strlen($s)%(3*$i);
  11.  if($q){$s.=str_repeat('0',3*$i-$q);}
  12.  
  13.  $c=(256-pow(2,$i));
  14.  
  15.  for($a=0;$a<strlen($s)/$i/3;$a++){
  16. $x=$a%$ix;
  17. $y=floor($a/$ix);
  18.  
  19. $rgb=imagecolorat($im,$x,$y);
  20. $r=(($rgb>>16)&$c)+bindec(substr($s,$a*$i*3,$i));
  21. $g=(($rgb>>8)&$c)+bindec(substr($s,$a*$i*3+$i,$i));
  22. $b=($rgb&$c)+bindec(substr($s,$a*$i*3+2*$i,$i));
  23.  
  24. imagesetpixel($im,$x,$y,($r<<16)+($g<<8)+$b);
  25.  }
  26.  
  27.  imagepng($im,'2.png');
  28. ?>



Algorytm dekodowania

  1. <?
  2. // kod odpowiedzialny za dekodowanie tekstu w obrazku:
  3.  
  4. // pobranie pierwszych 10 bajtow informacji z obrazka oraz stopien upakowania
  5. $d = 10;
  6. // pobierz plik
  7.  
  8.  $im=@imagecreatefrompng('2.png');  //odczytuje obraz z adresu URL
  9. if (!$im)   //jeśli nie ma obrazu lub nie jest PNG wyswietl blad
  10.  {
  11.  echo &#092;"<center>Niestety wystąpił błąd podczas odczytu. Upewnij się, czy wczytujesz obraz PN
  12. </CENTER>\";
  13.  exit();
  14. }  
  15.  
  16. /***********************************************************************/
  17.  
  18.  $ix=imagesx($im);$iy=imagesy($im);
  19.  
  20.  $rgb=imagecolorat($im,0,0);
  21.  $i=(($rgb>>16)&1)*4+(($rgb>>8)&1)*2+($rgb&1)+1;  //odczyt pierwszego piksela, w którym mamy
  22.   //stopien upakowania jeśli 000, to $i=1, 111 = $i=8
  23.  
  24.  $c=pow(2,$i)-1;
  25.  
  26.  $s='';
  27.  for($a=0;$a<ceil($d*8/$i/3);$a++){  // odczyt jak w przypadku kodowania z pominieciem
  28.   //pierwszego piksela
  29. $x=($a+1)%$ix;
  30. $y=floor(($a+1)/$ix);
  31.  
  32. $rgb=imagecolorat($im,$x,$y);
  33. $r=decbin(($rgb>>16)&$c);
  34. $g=decbin(($rgb>>8)&$c);
  35. $b=decbin($rgb&$c);
  36.  
  37.  $s.=str_pad($r,$i,'0',STR_PAD_LEFT).str_pad($g,$i,'0',STR_PAD_LEFT).str_pad($b,$i,'0',STR_PAD_LEFT);
  38. // w s przechowujemy nasze zakodowane informacje, z lewej strony wypelniamy zerami
  39.  }
  40.  
  41.  $t='';
  42.  for($z=0;$z<$d;$z++) {$t.=chr(bindec(substr($s,$z*8,8)));} //zamien w kolejne bajty na liczbe dziesietna
  43.  //i pozniej ta liczbe na znaki
  44.  
  45. /***********************************************************************/ 
  46.  
  47. // sprawdza, czy w obrazie jest informacja na podstawie tego, czy pierwsze 10 bajt
  48. w to liczba
  49.  
  50.  $t+=0;  //konwersja z string na int
  51.  if(!is_integer($t))   //sprawdza czy jest liczba
  52.  {
  53. echo \"<center>W tym obrazie nie jest zakodowana infromacja</CENTER>\";
  54. exit();
  55.  }
  56.  
  57. /***********************************************************************/ 
  58.  
  59. // algorytm dekodowania informacji - analogicznie, jak deszyfracja pierwszych 10 bajtow
  60.  
  61.  $d=$t+10;   // dlugosc calej zakodowanej infromacji
  62.  
  63.  $s='';
  64.  for($a=0;$a<ceil($d*8/$i/3);$a++){
  65. $x=($a+1)%$ix;
  66. $y=floor(($a+1)/$ix);
  67.  
  68. $rgb=imagecolorat($im,$x,$y);
  69. $r=decbin(($rgb>>16)&$c);
  70. $g=decbin(($rgb>>8)&$c);
  71. $b=decbin($rgb&$c);
  72.  
  73. $s.=str_pad($r,$i,'0',STR_PAD_LEFT).str_pad($g,$i,'0',STR_PAD_LEFT).str_pad($b,$i,'0',STR_PAD_LEFT);
  74.  }
  75.  
  76.  $t='';
  77.  for($z=0;$z<$d;$z++){$t.=chr(bindec(substr($s,$z*8,8)));}
  78.  
  79.  // w $t mamy cala informacje + 10 bajtow dlugosci na samym poczatku, wycinamy 10 p
  80. erwszych liczb
  81.  $t=substr($t,10);
  82.  
  83.  
  84. // zapis do pliku
  85.  
  86.  // file_put_contents('2.txt',$t); // tylko dla >= php 5.0 
  87.  $p=fopen('2.txt','w');
  88.  fputs($p,$t);
  89.  fclose($p);
  90. ?>


Ten post edytował Reigon 17.11.2004, 23:13:25
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 04:24