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
Afficher la suite