STEGANOGRAPHIE

Signaler
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
-
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
-
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

Messages postés
855
Date d'inscription
mardi 19 novembre 2002
Statut
Membre
Dernière intervention
28 juillet 2009
1
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]
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
15
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