stéganographie

Eléphanteau du PHP | 26 Messages

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
<?
$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 0

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

10 mars 2012, 10:48

Salut,

Tu n'aurais pas un require() quelque part ?
Parce se la php cherche à faire un truc du genre require('Insertion1.php');

D'ailleurs il ne faut pas mettre de caractères spéciaux dans les noms de fichiers / dossiers c peux mettre le brin, vire le é du répertoire ;)

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 26 Messages

10 mars 2012, 15:20

merci s'était bien a cause du caractère spécial mais maintenant il ne m'affiche plus rien s'est normal ? et si oui comment je vais faire pour déchiffrer le texte merci d'avance

michel66
Invité n'ayant pas de compte PHPfrance

14 mai 2012, 12:54

Bravo, ça fonctionne nickel ici
C'est le seul script de stegano que j'ai reussi a faire fonctionner !!!