stéganographie
Posté : 10 mars 2012, 10:41
bonjour, je me suis amuser a suivre un tuto de stéganographie et il à fallu programmer en php il nous donne petit a petit un code
et
pour extraire le message
Fatal error: Unknown: Failed opening required 'C:/Program Files/EasyPHP-5.3.8.0/www/stéganographie/Insertion1.php' (include_path='.;C:\php\pear') in Unknown on line 0
j'ai mis l'image dans le même dossier que mon code
merci d'avance
<?
$message = 'Top secret ultra confidentiel !';
$lien = 'essai1.bmp';
$octet_decoupe = array();
$message .= chr(26);
// Là, ça commence à devenir intéressant.
$f_image = fopen($lien, 'r+b'); // On ouvre le fichier image, tout simplement.
fseek($f_image, 54); // On se place après le <italique>header</italique>.
for($i=0;$i<strlen($message);$i++)
{
$caractere = $message[$i];
$valeur_octet = ord($caractere);
$octet_binaire = decbin($valeur_octet);
$octet_binaire = str_pad($octet_binaire, 8, '0', STR_PAD_LEFT);
$octet_decoupe = str_split($octet_binaire, 2);
foreach($octet_decoupe AS $partie_octet)
{
$octet_image = fread($f_image, 1); // On récupère un seul octet, sous forme de caractère.
$octet_image = ord($octet_image); // On le convertit en nombre grâce à la table ASCII.
$octet_image -= $octet_image%4; // On rend les deux bits de poids faible égaux à zéro. La ligne suivante est équivalente mais utilise les opérateurs de bit.
//$octet_image = $octet_image & 252;
$partie_octet = bindec($partie_octet); // On reconvertit en base 10 pour pouvoir faire une addition.
$octet_image += $partie_octet; // La deuxième étape
fseek($f_image, -1, SEEK_CUR); // TRÈS IMPORTANT
fputs($f_image, chr($octet_image)); // On écrit tout simplement dans le fichier, en écrasant l'octet suivant.
}
}
fclose($f_image);
?>
pour insérer un message dans une image et
pour extraire le message
<?php
$lien = 'essai1.bmp';
$tampon = "";
$message = "";
$f_image = fopen($lien, 'rb'); // On ne modifie pas le fichier cette fois-ci, donc le mode r suffit.
fseek($f_image, 54); // On saute le header.
while(!feof($f_image)) // En théorie, on pourrait faire une boucle infinie que l'on ira « breaker » mais on ne va quand même pas tenter le diable, hein…
$octet_image = fread($f_image, 1);
$octet_image = ord($octet_image); // On lit la valeur du "charactère" lu.
$bits_pf = $octet_image%4;
$bits_pf = decbin($bits_pf); // On récupère les deux bits de poids faible sous forme binaire.
$bits_pf = str_pad($bits_pf, 2, '0', STR_PAD_LEFT); // On ajoute un zéro si nécessaire.
$tampon .= $bits_pf; // On rajoute ce qu'on a trouvé au tampon.
if(strlen($tampon) == 8)
{
// Une fois qu'on a la valeur du caractère du message en base 2.
$tampon = bindec($tampon); //conversion en base 10
if($tampon == 26)
{
// Fin du message
echo $message;
return;
}
$message .= chr($tampon); // Si l'on n'est pas arrivé à la fin du message, on ajoute le caractère trouvé et on réinitialise le tampon.
$tampon = "";
}
}
?>
il m'affiche Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0Fatal error: Unknown: Failed opening required 'C:/Program Files/EasyPHP-5.3.8.0/www/stéganographie/Insertion1.php' (include_path='.;C:\php\pear') in Unknown on line 0
j'ai mis l'image dans le même dossier que mon code
merci d'avance