Traduction d'un programme en PHP sur le logiciel Processing.

Fermé
LennyBarre Messages postés 5 Date d'inscription lundi 7 avril 2014 Statut Membre Dernière intervention 7 avril 2014 - 7 avril 2014 à 17:19
Bonjour,

Nous avons pour un de nos différents projets d'informatique un programme permettant de cacher un message dans une image (Stéganographie) et un autre programme permettant de le décrypter.

Petit problème, ces programmes sont en PHP et nous n'avons pas de serveur par chez nous.

On nous à donc conseillé de les traduire en "Processing" il me semble que c'est du javascript mais nous n'avons pas vraiment de compétences sur ce fameux logiciel ...

Pourriez-vous nous apporter une "grande" aide S.V.P ?

Nos programmes (en PHP)

Insertion :
_______________________________________________________________________


<?php

if(isset($_POST['message']) && isset($_POST['image'])){



$message = $_POST['message'];
$lien = 'images/'.$_POST['image'];

$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 header.

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);
echo " c 'est fait ...";
}

echo '
<form action="insertion.php" method="post">
<p>Votre message : <input type="text" name="message" /></p>
<p>Votre image : <input type="file" name="image" id="image" /></p>
<p><input type="submit" value="OK"></p>
</form>';


?>


_______________________________________________________________________


Ainsi que le second programme : récupération

_______________________________________________________________________


<?php

if(isset($_POST['image'])){

echo 'mon image : '.$_POST['image'].'<br/>';





$lien = 'images/'.$_POST['image'];
$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 = "";
}

}


}

echo '
<form action="recuperation1.php" method="post">
<p>Votre image : <input type="file" name="image" id="image" /></p>
<p><input type="submit" value="OK"></p>
</form>';


?>

_______________________________________________________________________


Merci d'avance pour vos futures réponses :)

Informatiquement, votre serviteur Lenny.