STEGANOGRAPHIE

malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 - 24 févr. 2005 à 17:33
malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 - 24 févr. 2005 à 17:42
J'ai bricolé le code qui suit. J'ai pas voulu le poster comme une
source (pas dans cet état, il n'est pas abouti!), alors je le mets là
si ça peut intéresser l'un ou l'autre!





C'est de la stéganographie: je cache un text dans une image. Une démo
est, provisoirement, visible sur http://noisy.ch/images/stegano.php





Le principe est simplissime: on enlève un bit de couleur à chaque pixel et on utilise ce bit pour mettre notre message





<?php


function transformPlainText($plain){





$trans = array(


" " => "00000",


"A" => "00001",


"B" => "00010",


"C" => "00011",


"D" => "00100",


"E" => "00101",


"F" => "00110",


"G" => "00111",


"H" => "01000",


"I" => "01001",


"J" => "01010",


"K" => "01011",


"L" => "01100",


"M" => "01101",


"N" => "01110",


"O" => "01111",


"P" => "10000",


"Q" => "10001",


"R" => "10010",


"S" => "10011",


"T" => "10100",


"U" => "10101",


"V" => "10110",


"W" => "10111",


"X" => "11000",


"Y" => "11001",


"Z" => "11010"


);


$plain = strtr($plain,$trans);


return $plain;


}





$src = "cathedrale2.JPG";


echo '';

echo "IMAGE D'ORIGINE:

";

echo ', ';

$im = ImageCreateFromJpeg($src);

list($width, $height) = getimagesize($src);

$im2 = ImageCreateTrueColor($width, $height);

for($i=0;$i<$width;$i++){

for ($j=0;$j<$height;$j++){

$rgb = imagecolorat($im, $i, $j);

$pix[$j][$i*$height][0] = ($rgb >> 16) & 255;

$pix[$j][$i*$height][1] = ($rgb >> 8) & 255;

$pix[$j][$i*$height][2] = $rgb & 255;

imagesetpixel($im2,$i,$j,65536*$pix[$j][$i*$height][0]+256*$pix[$j][$i*$height][1]+$pix[$j][$i*$height][2]-1);

}

}

imagejpeg($im2, \"file2.jpg\");

echo '';

echo "IMAGE MODIFIEE:

";

echo ', ';

// Le message ne peut être plus grand que $width\"height bits!

$plain = \"BONJOUR TOUT LE MONDE CECI EST UN MESSAGE ULTRA SECRET\";

echo '';

echo "
MESSAGE A CODER:
".$plain;

echo ', ';

$binPlain = transformPlainText($plain);

$im3 = ImageCreateTrueColor($width, $height);

for ($i=0;$i<$width;$i++){

for ($j=0;$j<$height;$j++){

if(strlen($binPlain) <= ($j+$i*$height))

$hidetext = $binPlain[$j+$i*$height];

else $hidetext = 0;

$rgb = imagecolorat($im2, $i, $j);

$pix[$j][$i*$height][0] = ($rgb >> 16) & 255;

$pix[$j][$i*$height][1] = ($rgb >> 8) & 255;

$pix[$j][$i*$height][2] = $rgb & 255;

imagesetpixel($im3,$i,$j,65536*$pix[$j][$i*$height][0]+256*$pix[$j][$i*$height][1]+$pix[$j][$i*$height][2]+$hidetext);

}

}

imagejpeg($im3, \"file3.jpg\");

echo '';

echo "IMAGE AVEC MESSAGE:

";

echo ', ----
';

// on va checker qu'il y a bien une différence entre les 2 images:

echo 'Couleurs de l\'originale:
';

$im4 = ImageCreateFromJPEG($src);

for ($i=0;$i<$width;$i++){

for ($j=0;$j<$height;$j++){

if(($j+$height*$i) <= 20){

$rgb = ImageColorAt($im4, $i, $j);

$r = ($rgb >> 16) & 255;

$g = ($rgb >> 8) & 255;

$b = $rgb & 255;

echo (65536*$r+256*$g+$b)." ";

}

}

}

echo '..., ';

echo 'Couleurs de l\'image porteuse:
';

$im5 = ImageCreateFromJPEG("file3.jpg");

for ($i=0;$i<$width;$i++){

for ($j=0;$j<$height;$j++){

if(($j+$height*$i) <= 20){

$rgb = ImageColorAt($im5, $i, $j);

$r = ($rgb >> 16) & 255;

$g = ($rgb >> 8) & 255;

$b = $rgb & 255;

echo (65536*$r+256*$g+$b)." ";

}

}

}

echo '..., ';

echo '
';





?>



++ Malik7934

2 réponses

davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
24 févr. 2005 à 17:39
pas mal :)

tu devrais faire un codeur, decodeur en ligne.

du genre je code mon image, je l'envoie à X, X vient sur ton site, uplaod son image, mon message secret apparait.

-------------------------------------
Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
0
malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
24 févr. 2005 à 17:42
ouais, je prends note... ce code, c'est juste un essai et comme je vais
pas avoir trop le temps de bosser dessus ces prochaines semaines, je
l'ai mis là au cas où ça inspirerait quelqu'un... mais je vais y penser
0
Rejoignez-nous