<?php
ob_start();
set_time_limit(5);
mb_internal_encoding ('UTF-8');
ini_set('display_errors',1);
error_reporting(E_ALL);
//
/*
$s="16594958435a5e144b464f585e020d7e5f0a5a4f584e590d03111605594958435a5e14"; $uh="";
foreach(str_split($s,2) as $o) $uh .= chr(hexdec($o));
echo $uh ^ str_repeat('*', strlen($uh));
*/
// FONCTIONS PHP
/*
window.frames["iframe"].document.getElementById("unique_button").onclick();
alert(document.getElementById('iframe').contentDocument.getElementById('test').innerHTML);document.getElementById('iframe').contentDocument.getElementById('test').onclick();
$test=$datas_array[1];
list_array(array($test=>$$test),'liste');
echo '<pre>';print_r(str_split(base_64_2(str_replace('=','',base64_encode("http://n-pn.fr"))),8));echo '</pre>';exit();
//imagepng($picture, 'img.png');file_get_contents('img.png');
$data = base64_encode((binary)ob_get_contents());
ob_end_clean();
echo $data;
$im = imagecreatefromstring($data);
if ($im !== false)
{
header('Content-Type: image/png');
imagepng($im);imagedestroy($im);
}
else
{
echo 'An error occurred.';
}
$monfichier = fopen('data.hack', 'w+');
fputs($monfichier, gzdeflate(crypter($_POST['data'],$_POST['key'])));
fclose($monfichier);
echo 'Vous avez envoyé les données suivantes :<br />',
htmlspecialchars($_POST['data']),'<br />',
'avec la clé : <br />',
htmlspecialchars($_POST['key']),
'<br /><br />';
$a=decoupage($_POST['data'],'encode');//on découpe les données non decodées et on stocke le nom du super array
list_array(array($a=>$$a),'ligne','test');//on stocke les données en ligne dans une variable
echo 'Voilà les données encodées en base64 :<br />',
htmlspecialchars($test),
'<br /><br />';
$data=crypter($test,$_POST['key']);
echo 'Maintenant crypter :<br />',
htmlspecialchars($data),
'<br /><br />';
$data=gzdeflate($data,9);
echo 'Et pour terminer, les compresser :<br />',
htmlspecialchars($data);
$data=base64_encode($data);
//$data=gzencode($data,9);
//$data=gzcompress($data);
echo 'Et pour terminer, les compresser :<br />',
htmlspecialchars($data);
echo htmlspecialchars(decrypter($data,$_POST['key']));
/*
if(progression==2)//passage à l'étape 2
{
document.getElementById('iframe').setAttribute('src','data_absolue.php?mode='+array_src_mode[progression]);
var iframe=document.getElementById('iframe');
alert(document.getElementById('iframe').document.getElementById("test").innerHTML);
/*
var salut_2=iframe.document.getElementById('test');
alert(salut_2);
salut_2.onclick();
document.getElementById('iframe').contentDocument.getElementById('test').innerHTML;
getElementById('unique_button').onclick();
*/
/*
<button onclick="document.getElementById('frame1').setAttribute('src','data_complet.php?mode=telechargement_start')"></button>
<iframe id="frame1" src=""></iframe>
var oFrame = window.frames["myFrame"].document.getElementById("idElement").innerHTML;
<button onclick="parent.document.getElementById('progression_variable').innerHTML='3';parent.document.body.onload();"></button>
document.getElementById('formulaire').submit();
*/
function decoupage($datas_string='',$mode='')
{
if(empty($datas_string)||empty($mode))
{
echo 'variable(s) manquante(s) pour la fonction decoupage';return;
}
$datas_string=trim($datas_string);
$datas_string=str_replace(array('<','>','_','..'),array('.<.','.>.','._.','.'),$datas_string);/*on met un séparateur commun à tous les méta-caractères en oubliant de retirer les doublons*/
$datas_string=substr($datas_string,1, -1);/*on retire les deux caractères de début et de fin (qui sont toujours des ".") pour éviter des données vides */
$datas_array=explode('.',$datas_string);/* on découpe les données selon le séparateur */
global $$datas_array[1];
$level=0;/* le niveau de profondeur des données */
$courant='$';/* la variable actuellement en train d'être analysée */
foreach($datas_array as $key => $value )/* on explore l'array des données */
{
if($mode=='encode')
{
@$next_data=$datas_array[$key+1];/* on decode la donnée suivante */
}
elseif($mode='decode')
{
@$next_data=base64_decode($datas_array[$key+1]);/* on decode la donnée suivante */
}
else
{
echo 'False mode for function decoupage';return;
}
if($value=='<')/* si on s'enfonce dans les profondeur de l'array*/
{
if($level==0)/*si on est au niveau 0 et que donc le nom du super array n'est pas encore connu */
{
$courant.=$next_data;/* on ajoute le nom de la données à "courant"*/
}
else
{
$courant.='[\''.$next_data.'\']';/*on rajoute [next_data] à la variable actuelle */
}
$level--;/* on retire un niveau */
}
elseif($value=='>')/* si on remonte à la surface */
{
$courant=substr($courant,0,strrpos($courant,'['));/* on retire une partie de la variable "courant" */
$level++;/* on ajoute un niveau */
}
elseif($value=='_')/* si on entre dans un array ou une variable */
{
if($next_data!='<'&&$next_data!='>')/* si la prochaine donnée n'est pas un méta-caractère */
{
$$courant=$next_data;/* on crée la variable et on l'as remplie */
}
}
}
return $datas_array[1];
}
function list_array($array,$mode,$var)
{
if(empty($array)||empty($mode))
{
echo 'données vide for function list_array';return;
}
if($mode=='liste')
{
foreach($array as $key => $value)
{
if(is_array($value))
{
@$GLOBALS[$var].=$key.' :<ul>';
list_array($value,$mode,$var);
@$GLOBALS[$var].='</ul><br />';
}
else
{
@$GLOBALS[$var].='<li>'.$key.' = '.$value.'</li>';
}
}
}
elseif($mode='ligne')
{
foreach($array as $key => $value)
{
if(is_array($value))
{
@$GLOBALS[$var].='<'.base64_encode($key).'_';
list_array($value,$mode,$var);
@$GLOBALS[$var].='>';
}
else
{
@$GLOBALS[$var].='<'.base64_encode($key).'_'.base64_encode($value).'>';
}
}
}
else
{
echo 'error variable "mode" in function list_array';return;
}
}
/*
Ces deux fonctions de """"""chiffrement""""" ont étaient trouver sur internet, mais elles ne valent rien
comme véritable chiffrement, c'est uniquement pour avoir un systeme qui ne se base sur aucune librairies
(En clair je les garde juste comme ça :p )
et faudras que je l'améliore quand meme quand j'aurais le temps ^^"
*/
function chiffrement($mode,$string,$key)
{
$key = hash('whirlpool',$key);
$letter = -1;
$newstr = '';
//$string = base64_decode($string);
$strlen = strlen($string);
for ( $i = 0; $i < $strlen; $i++ )
{
$letter++;
if ( $letter > 31 )
{
$letter = 0;
}
if($mode='chiffrement')
{
$neword = ord($string{$i}) + ord($key{$letter});
}
elseif($mode='dechiffrement')
{
$neword = ord($string{$i}) - ord($key{$letter});
}
if($mode='chiffrement')
{
if ( $neword > 255 )
{
$neword -= 256;
}
}
elseif($mode='dechiffrement')
{
if ( $neword < 1 )
{
$neword += 256;
}
}
$newstr .= chr($neword);
}
//$newstr=base64_encode($newstr);
return $newstr;
}
function chiffrement_2($chiffre,$string,$key,$level)
{
if($level==1) {$key = md5($key);}
elseif($level==2) {$key = sha1($key);}
else {$key = hash('whirlpool',$key);}
$string=str_split(base64_encode($string),1);
$key=str_split($key,1);
$resultat='';
echo count($string).'<br />';
if($chiffre==1)
{
foreach($string as $key2=>$value)
{
$resultat.=chr(ord($value)+1);
//$resultat.=chr((ord($value)+ord($key[$key2 % (count($string)-1)]))%256);
}
echo "chaine chiffrer : ".$resultat;
}
elseif($chiffre==2)
{
foreach($string as $key2=>$value)
{
$resultat.=chr(ord($value)-1);
//$resultat.=chr((ord($value)-ord($key[$key2 % (count($string)-1)]))%256);
}
echo "chaine déchiffrer : ".$resultat;
}
else
{
echo 'error mode fonction chiffrement';
}
}
function base_64_2($chaine)
{
return str_replace(
array(
'A','B','C','D','E','F','G','H','I','J','K','L','M',
'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
'a','b','c','d','e','f','g','h','i','j','k','l','m',
'n','o','p','q','r','s','t','u','v','w','x','y','z',
'0','1','2','3','4','5','6','7','8','9',
'+','/')
,
array(
000000,000001,000010,000011,000100,000101,000110,000111,
001000,001001,001010,001011,001100,001101,001110,001111,
010000,010001,010010,010011,010100,010101,010110,010111,
011000,011001,011010,011011,011100,011101,011110,011111,
100000,100001,100010,100011,100100,100101,100110,100111,
101000,101001,101010,101011,101100,101101,101110,101111,
110000,110001,110010,110011,110100,110101,110110,110111,
111000,111001,111010,111011,111100,111101,111110,111111)
,
$chaine
);
}
function steganographie($mode,$url_picture,$chaine,$taille_bloc=null,$count_blocs=null)
{
if($mode=='cache')
{
//$picture = imagecreatefrompng($url_picture);
$picture= imagecreatetruecolor(35,35);
imagealphablending($picture,true);
imagesavealpha($picture, false);
$white=imagecolorallocatealpha($picture,255,255,255,0);//on met l'image en fond blanc
$width=imagesx($picture);
$height=imagesy($picture);
$chaine=base_64_2($chaine);
$taille_bloc=8;
$nbr_valeur_par_pixel=3;
$blocs=str_split($chaine,$taille_bloc);
$nbr_blocs=count($blocs);
$nbr_valeur_actuel=0;
if($nbr_blocs>($width*$height*$nbr_valeur_par_pixel))
{
echo 'error';exit();
}
for($y=0;$y<$height;$y++)
{
for($x=0;$x<$width;$x++)
{
$pixel=imagecolorsforindex($picture,imagecolorat($picture,$x,$y));//on récupère les valeurs des trois couleurs du pixel
$alpha=$pixel['alpha'];//on sauvegarde le canal alpha
unset($pixel['alpha']);//on supprime le canal alpha inutilisé
/*
echo '<pre>pixel de coordonnées x= '.$x.' et y= '.$y.'<br />Avant l\'operation : ';
print_r($pixel);
*/
foreach($pixel as $key=>$value)//on parcours les trois valeurs du pixel
{
$nbr_valeur_actuel++;//on dit que l'on veut le bloc suivant
if($nbr_valeur_actuel<=$nbr_blocs-1)//si il reste des données à mettre
{
$pixel[$key]= base_convert($pixel[$key],10,2);//on converti la valeur en binaire
while(strlen($pixel[$key])<8)//tant que la longueur de la chaine en binaire n'est pas égale à un octet
{
$pixel[$key]='0'.$pixel[$key];//on rajoute un zéro sans valeur devant
}
$pixel[$key]= substr($pixel[$key],0, -($taille_bloc));//on supprime le nombre de caractère d'un bloc à la valeur
$pixel[$key]= $pixel[$key].$blocs[$nbr_valeur_actuel];//on remplit ce qu'on vient de supprimer
$pixel[$key]=base_convert($pixel[$key],2,10);//on reconverti le résultat en décimale
}
}
//désormais on peut ajouter les valeurs de la chaine à stéganographier dans le pixel
if($nbr_valeur_actuel<=$nbr_blocs-1)//si il reste des données à mettre
{
$lol=imagecolorallocatealpha(
$picture,
$pixel['red'],
$pixel['green'],
$pixel['blue'],
$alpha
);
imagesetpixel ($picture,$x,$y,$lol);
}
else
{
imagesetpixel ($picture,$x,$y,imagecolorallocatealpha($picture,0,0,250,0));
}
/*
echo 'Après l\'operation :<br />';
print_r($pixel);
echo '</pre>pixel terminé <br />';
*/
}
}
header('Content-Type: image/png');
imagepng($picture);imagedestroy($picture);
exit();
}
elseif($mode=='decache')
{
//function steganographie($mode,$url_picture,$chaine,$taille_bloc=null,$count_blocs=null)
//imagecreatefromstring($data);
//$picture = imagecreatefrompng($url_picture);
$picture= imagecreatetruecolor(35,35);
imagealphablending($picture,true);
imagesavealpha($picture, false);
$width=imagesx($picture);
$height=imagesy($picture);
$taille_bloc=$taille_bloc;
$count_blocs=$count_blocs;
$nbr_valeur_par_pixel=3;
$chaine="";
// echo 'if('.$nbr_blocs.'>'.($width*$height*$nbr_valeur_par_pixel).')';
if($nbr_blocs>($width*$height*$nbr_valeur_par_pixel))
{
echo 'error';exit();
}
for($y=0;$y<$height;$y++)
{
for($x=0;$x<$width;$x++)
{
$pixel=imagecolorsforindex($picture,imagecolorat($picture,$x,$y));//on récupère les valeurs des trois couleurs du pixel
$alpha=$pixel['alpha'];//on sauvegarde le canal alpha
unset($pixel['alpha']);//on supprime le canal alpha inutilisé
/*
echo '<pre>pixel de coordonnées x= '.$x.' et y= '.$y.'<br />Avant l\'operation : ';
print_r($pixel);
*/
foreach($pixel as $key=>$value)//on parcours les trois valeurs du pixel
{
if($nbr_valeur_actuel<=$nbr_blocs-1)//si il reste des données à mettre
{
$pixel[$key]= base_convert($pixel[$key],10,2);//on converti la valeur en binaire
while(strlen($pixel[$key])<8)//tant que la longueur de la chaine en binaire n'est pas égale à un octet
{
$pixel[$key]='0'.$pixel[$key];//on rajoute un zéro sans valeur devant
}
$pixel[$key]=substr ($test, -($taille_bloc));//on recupere les PRECIEUX bits :p
$pixel[$key]=base_convert($pixel[$key],2,10);//on reconverti le résultat en décimale
}
}
//désormais on peut ajouter les valeurs de la chaine à stéganographier dans le pixel
if($nbr_valeur_actuel<=$nbr_blocs-1)//si il reste des données à mettre
{
$lol=imagecolorallocatealpha(
$picture,
$pixel['red'],
$pixel['green'],
$pixel['blue'],
$alpha
);
imagesetpixel ($picture,$x,$y,$lol);
}
else
{
imagesetpixel ($picture,$x,$y,imagecolorallocatealpha($picture,0,0,250,0));
}
/*
echo 'Après l\'operation :<br />';
print_r($pixel);
echo '</pre>pixel terminé <br />';
*/
}
}
header('Content-Type: image/png');
imagepng($picture);
imagedestroy($picture);
exit();
}
else
{
echo 'error!';
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Système de chiffrement/Stéganographie de donnée sous la forme d'un array multi-dimensionnel</title>
<meta charset="utf-8"/>
<!-- LE FICHIER CSS GLOBAL -->
<style>
#progression_entier/*le systeme de progression en entier*/
{
border-radius:10px;/*une bordure rond*/
border:2px solid black;/*la bordure */
width: 1000px;/*la largeur*/
padding: 20px;/*les marges intérieur*/
}
#progression_variable/*l'id qui contient le niveau de progression*/
{
display: none;/*on le cache*/
}
#progression_liste_title/*La liste des title des différentes étapes de la progression*/
{
padding:10px;
border-radius:10px 10px 0px 0px;
background-color: black;
}
#progression_liste_title div/*Chaque étape de la progression*/
{
vertical-align: middle;
display: table-cell;
text-align: center;
border-radius:50px;
border: 2px solid white;
min-width: 100px;
height: 100px;
background-color: grey;
padding: 10px;
}
#progression_liste_contenu/*La liste des contenu des étapes de la progression*/
{
display: none;/*on la cache*/
}
#progression_affichage/*L'id que l'on vient remplir et modifier */
{
border-radius: 0px 0px 10px 10px;
background-color: grey;
min-height: 300px;
padding: 10px;
}
.array
{
/*vide*/
}
#formulaire
{
display: none;
}
#unique_button
{
display: none;
}
</style>
<!-- FIN DU FICHIER CSS -->
<!-- LE FICHIER JS GLOBAL -->
<script>
var nombre_array=0;
var nombre_valeur=0;
var survol=0;
var tab=0;
var affichage="text";
var objet_temporaire=null;
var element_temporaire=null;
function init()//fonction activer au chargement de la page
{
var array = document.querySelectorAll("#progression_liste_title .progression_title");/*on selectionne les éléments qu'on veut*/
var longueur=array.length;
for(var abc=0;abc<longueur;abc++)/*on les parcours*/
{
/*on leur ajoute les événèment qu'on veut*/
array[abc].setAttribute('onmouseover',"progression_survol_start(this);");
array[abc].setAttribute('onmouseout',"progression_survol_end();");
}
/*pareil pour lui*/
document.getElementById('progression_button').setAttribute('onclick',"progression_avancer();");
/*on met à jour*/
progression_maj();
}
function trouve_numero_element_liste_css(css,objet)
{
var boucle=document.querySelectorAll(css);
var longueur=boucle.length;
for(var abc=0;abc<longueur;abc++)
{
if(boucle[abc]==objet)
{
return abc+1;
}
}
return false;
}
function progression_maj()
{
var progression=parseInt(document.getElementById('progression_variable').innerHTML);
var array = document.querySelectorAll("#progression_liste_title .progression_title");
var longueur = array.length;
for(var a = 0; a < longueur; a++)
{
var numero=trouve_numero_element_liste_css('#progression_liste_title .progression_title',array[a]);
if(numero<progression)
{
array[a].style.border="2px solid green";
}
if(numero==progression)
{
array[a].style.border="2px solid blue";
document.getElementById("progression_affichage").innerHTML=array[a].innerHTML;
}
if(numero>progression)
{
array[a].style.border="2px solid white";
}
}
if(survol!=null && survol!=0)
{
document.querySelectorAll("#progression_liste_title .progression_title")[survol-1].style.border="2px solid red";
document.getElementById("progression_affichage").innerHTML=document.querySelectorAll("#progression_liste_contenu .progression_contenu")[survol-1].innerHTML;
}
}
function progression_survol_start(objet)
{
survol=trouve_numero_element_liste_css('#progression_liste_title .progression_title',objet);
progression_maj();
}
function progression_survol_end()
{
survol=0;
progression_maj();
}
function progression_avancer()
{
var progression=parseInt(document.getElementById('progression_variable').innerHTML)+1;
if(document.querySelectorAll("#progression_liste_title .progression_title").length>=progression)
{
document.getElementById('progression_variable').innerHTML=progression;
if(progression==2)//si on va à la création
{
document.getElementById('iframe').setAttribute('src','data_absolue.php?mode=creation');//on modifie le src de l'iframe
}
if(progression==3)//si on va au formatage
{
document.getElementById('iframe').contentDocument.getElementById("div_creation").style.display='none';
document.getElementById('iframe').contentDocument.getElementById("formulaire").style.display='block';
}
if(progression==4)//si on va au visionnement
{
//document.getElementById('iframe').contentDocument.getElementById('unique_button').onclick();
}
if(progression==5)//si on va au téléchargement
{
document.getElementById('iframe').contentDocument.getElementById('formulaire').submit();
}
}
else
{
alert("Tu veux aller trop loin :p");
}
progression_maj();
}
function create_array(emplacement)
{
var array = document.createElement('fieldset');
array.setAttribute("class","array");
array.appendChild(create_button_erase_element());
array.appendChild(create_button_modif_affichage_data_element());
array.appendChild(create_button_modif_temp_affichage_data_element());
array.appendChild(create_button_rajoute_enfant_element());
array.appendChild(create_button_rajoute_attribut_array());
if(emplacement!="racine")
{
array.appendChild(create_button_transform_array_valeur());
}
array.appendChild(document.createElement('br'));
array.appendChild(document.createElement('br'));
var ul_1=document.createElement('ul');
ul_1.setAttribute("class","debut_liste_attribut");
array.appendChild(ul_1);
// /!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\
//rajoute_attribut(array,'name');ERROR
// /!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\
var truc=document.createElement('span');
truc.setAttribute('class','fin_liste_attribut');
array.appendChild(truc);
var span_1 = document.createElement('span');
span_1.setAttribute("class","debut_liste_key");
array.appendChild(span_1);
var truc2=document.createElement('span');
truc2.setAttribute("class","fin_liste_key");
array.appendChild(truc2);
var span_2 = document.createElement('span');
span_2.setAttribute("class","fin_array");
array.appendChild(span_2);
return array;
}
function create_enfant()
{
var enfant=document.createElement('span');
enfant.setAttribute('class','enfant');
var enfant_1 = document.createElement('input');
enfant_1.setAttribute('class', 'enfant_key');
enfant_1.setAttribute('placeholder', 'key');
enfant_1.setAttribute("type",affichage);
enfant.appendChild(enfant_1);
var enfant_2 = document.createElement('span');
enfant_2.setAttribute('class', 'enfant_=');
enfant_2.appendChild(document.createTextNode(' = '));
enfant.appendChild(enfant_2);
var enfant_3 = document.createElement('input');
enfant_3.setAttribute('class', 'enfant_value');
enfant_3.setAttribute('placeholder', 'value'+(nombre_valeur+1));
enfant_3.setAttribute("type",affichage);
enfant.appendChild(enfant_3);
enfant.appendChild(create_button_erase_element());
enfant.appendChild(create_button_transform_valeur_array());
var enfant_5 = document.createElement('br');
enfant.appendChild(enfant_5);
return enfant;
}
function create_attribut(name_key)
{
var attribut=document.createElement("li");
attribut.setAttribute("class",'attribut');
var input_1=document.createElement('input');
input_1.setAttribute("class",'attribut_key');
input_1.setAttribute("type",affichage);
if(name_key!=null)
{
input_1.setAttribute('value',name_key);
input_1.setAttribute('disabled','');
}
attribut.appendChild(input_1);
var span_1=document.createElement("span");
span_1.setAttribute("class","attribut_=");
var text_1=document.createTextNode("=");
span_1.appendChild(text_1);
attribut.appendChild(span_1);
var input_2=document.createElement('input');
input_2.setAttribute("class",'attribut_value');
input_2.setAttribute("type",affichage);
attribut.appendChild(input_2);
var span_2=document.createElement("span");
span_2.setAttribute("class","attribut_fin");
attribut.appendChild(span_2);
return attribut;
}
function create_button_transform_array_valeur()
{
var element = document.createElement("button");
element.style.backgroundColor="orange";
element.setAttribute('onclick','this.parentNode.parentNode.replaceChild(create_enfant(), this.parentNode);');
element.innerHTML="Transformer en valeur";
return element;
}
function create_button_transform_valeur_array()
{
var element = document.createElement("button");
element.style.backgroundColor="violet";
element.setAttribute('onclick','this.parentNode.parentNode.replaceChild(create_array(), this.parentNode);');
element.innerHTML="Transformer en array";
return element;
}
function create_button_erase_element()
{
var element = document.createElement("button");
element.style.backgroundColor="red";
element.setAttribute('onclick','this.parentNode.parentNode.removeChild(this.parentNode);');
element.innerHTML="effacer cet élement";
return element;
}
function create_button_modif_affichage_data_element()
{
var element=document.createElement('button');
element.style.backgroundColor="green";
element.setAttribute("onclick","salut_all(this,this.parentNode);");
element.innerHTML="Cacher les données";
return element;
}
function create_button_modif_temp_affichage_data_element()
{
var element=document.createElement('button');
element.style.backgroundColor="blue";
element.setAttribute("onclick","salut_temp(this,this.parentNode);");
element.innerHTML="Changer l'affichage des données pendant 5 secondes";
return element;
}
function create_button_rajoute_enfant_element()
{
var element = document.createElement('button');
element.style.backgroundColor="yellow";
element.setAttribute("id","button_"+(nombre_array+1));
element.setAttribute("onclick","rajoute_enfant(this.parentNode);");
element.innerHTML="ajouter une valeur";
return element;
}
function create_button_rajoute_attribut_array()
{
var element=document.createElement('button');
element.setAttribute('onclick','rajoute_attribut(this.parentNode);');
element.innerHTML='rajouter un attribut à cet array';
return element;
}
function rajoute_array(id_objet)
{
if(id_objet=='racine')
{
var array=create_array('racine');
}
else
{
var array=create_array();
}
nombre_array++;
parent = document.getElementById(id_objet);
parent.appendChild(array);
}
function rajoute_enfant(objet)
{
nombre_valeur++;
objet.querySelectorAll(".debut_liste_key")[0].appendChild(create_enfant());
}
function rajoute_attribut(objet,name_key)
{
objet.querySelectorAll(".debut_liste_attribut")[0].appendChild(create_attribut(name_key));
}
function explore_new_total(objet)
{
var donnees=document.getElementById('data');
var contenu="";
function add_text(texte)
{
var ajout=""
for(var salut=0;salut<tab;salut++)
{
contenu+="\t";
}
contenu+=texte;
}
function explore_new(objet)
{
//add_text("debut d'une exploration\n");
for(var abc=0;abc<objet.childNodes.length;abc++)
{
var element=objet.childNodes[abc];
if(element.nodeType==3)
{
//add_text("text: "+element.nodeValue+"\n");
}
else
{
classe=element.getAttribute("class");
essai_1=contenu+"<";
valeur_1=essai_1.match(new RegExp('<','gi')).length-1;
essai_2=contenu+">";
valeur_2=essai_2.match(new RegExp('>','gi')).length-1;
nombre_tab=valeur_1-valeur_2;
if(classe=="fin_array"){nombre_tab--;}
for(b=0,tab='';b<nombre_tab;b++)
{
tab+='\t';
}
//if(classe!=null){contenu+=classe+"\n";}
switch (classe)
{
case 'array':
contenu+="[\n";
break;
case 'debut_liste_attribut':
contenu+="(";
break;
case 'attribut_key':
contenu+=element.value;
break;
case 'attribut_=':
contenu+='=';
break;
case 'attribut_value':
contenu+=element.value;
break;
case 'attribut_fin':
contenu+=',';
break;
case 'fin_liste_attribut':
contenu+=')\n';
break;
case 'debut_liste_key':
contenu+='{';
break;
case 'enfant_key':
contenu+='<'+element.value;
break;
case 'enfant_=':
contenu+='_';
break;
case 'enfant_value':
contenu+=element.value+'>';
break;
case 'fin_liste_key':
contenu+='}\n';
break;
case 'fin_array':
contenu+=']';
break;
}
if(element.childNodes.length>0)
{
explore_new(element);
}
else
{
//add_text("element : "+element.getAttribute("fonction")+"\n");
}
}
}
//add_text("fin d'une exploration\n");
}
explore_new(objet);
donnees.innerHTML+=contenu;
alert(contenu);
}
function salut_all(element,objet)
{
if(affichage=="text")
{
var valeur="password";
element.innerHTML="Réafficher les données";
}
if(affichage=="password")
{
var valeur="text";
element.innerHTML="Cacher les données";
}
affichage=valeur;
function salut(objet)
{
for(var abc=0;abc<objet.childNodes.length;abc++)
{
var element=objet.childNodes[abc];
if(element.nodeType!=3)
{
classe=element.getAttribute("fonction");
if(classe=="attribut_key"||classe=="attribut_value"||classe=="enfant_key"||classe=="enfant_value")
{
element.setAttribute("type",valeur);
}
if(element.childNodes.length>0)
{
salut(element);
}
}
}
}
salut(objet);
}
function salut_temp(element,objet)
{
if(objet_temporaire==null && element_temporaire==null)
{
objet_temporaire=objet;
element_temporaire=element;
salut_all(element,objet);
element_temporaire.innerHTML="5";
setTimeout('element_temporaire.innerHTML="4";',1000);
setTimeout('element_temporaire.innerHTML="3";',2000);
setTimeout('element_temporaire.innerHTML="2";',3000);
setTimeout('element_temporaire.innerHTML="1";',4000);
var text_eval="salut_all(element_temporaire,objet_temporaire);";
text_eval+="element_temporaire.innerHTML=\"Changer l'affichage des données pendant 5 secondes\";";
text_eval+="objet_temporaire=null;element_temporaire=null;";
setTimeout(text_eval,5000);
}
else
{
alert("Attendez que le script de temporisation se termine !");
}
}
</script>
<!-- FIN DU FICHIER JS -->
</head>
<?php
if(empty($_GET['mode']))
{
$_GET['mode']='';
?>
<body onload="init();">
<div id="page">
<div id="progression_entier">
<button id="progression_button">Cliquer ici pour avancer</button>
<span id="progression_variable">1</span>
<div id="progression_liste_title">
<div class="progression_title">Présentation</div>
<div class="progression_title">Création</div>
<div class="progression_title">Formatage</div>
<div class="progression_title">Visionage</div>
<div class="progression_title">Téléchargement</div>
<div class="progression_title">Upload</div>
<div class="progression_title">Téléchargement</div>
</div>
<div id="progression_liste_contenu">
<div class="progression_contenu">
Bienvenue dans ce script qui va vous permettre de chiffrer et/ou stéganographier vos données sous la forme d'un array multi-dimensionnel.<br />
</div>
<div class="progression_contenu">
Maintenant que la présentation est finie, on passe à la création des données.<br />
Pour commencer, insérez des informations dans le formulaire, en créant des array, puis des valeurs à l'intérieur,<br />
<!--
Vous pouvez aussi modifier un array en valeur ou l'inverse, voire le supprimer.<br />
Une fois terminé, choisisez les dernières options et valider le formulaire.<br />
-->
<br />
/!\ Attention les données contenant des : <br />
[ ] ( ) < > _ = , { <br />
peuvent encore posez des problèmes, ils seront résolu par la suite.<br />
<br />
<br />
Reste à faire :
<ul>
<li>Ajout de la conversion array/valeur</li>
<li>Ajout de la suppression d'éléments</li>
<li></li>
</ul>
</div>
<div class="progression_contenu">
Les données sont prêtes, maintenant il faut les formater, cliquer sur suivant pour le faire.<br />
</div>
<div class="progression_contenu">
Voilà les données formatés :p<br />
</div>
<div class="progression_contenu">
VIDE /!\<br />
</div>
<div class="progression_contenu">
VIDE /!\<br />
</div>
<div class="progression_contenu">
VIDE /!\<br />
</div>
</div>
<div id="progression_affichage"></div>
</div>
<iframe id="iframe" src="data_absolue.php" width="1000px" height="500px"></iframe>
</div>
</body>
<?php
}
elseif($_GET['mode']=="creation")
{
?>
<button onclick="salut_all(this,document.getElementById('racine'));">Cliquer ici pour cacher les données</button>
<button onclick="salut_temp(this,document.getElementById('racine'));">Changer l'affichage des données pendant 5 secondes</button>
<br />
<button id="unique_buttona" onclick="explore_new_total(document.getElementById('racine'));">explore_new</button>
<br />
<div id="div_creation">
<button onclick="rajoute_array('racine');">Créer un array à la racine</button>
<div id="racine" ></div>
</div>
<br />
<form id="formulaire" action="data_absolue.php?mode=telechargement_start" method="post">
<textarea id="data" rows="15" cols="100" name="data"></textarea>
</form>
<?php
}
elseif($_GET['mode']=='telechargement_start')
{
ob_clean();
if(!empty($_POST['data']))
{
$tmpfname = tempnam("/tmp", "FOO");
$handle = fopen($tmpfname, "w");
fwrite($handle,$_POST['data']);
fwrite($handle,PHP_EOL);
$iv_size=mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256,MCRYPT_MODE_ECB);
$iv=mcrypt_create_iv($iv_size,MCRYPT_RAND);
$key_max=mcrypt_get_key_size(MCRYPT_RIJNDAEL_256,MCRYPT_MODE_ECB);
fwrite($handle,'iv= '.$iv.PHP_EOL);
$key="http://n-pn.fr";
$key.=base_convert(hash('whirlpool',$key),16,36);
$key=substr($key,0,$key_max);
fwrite($handle,'key= '.$key.PHP_EOL);
$crypt_text=mcrypt_encrypt(MCRYPT_RIJNDAEL_256,$key,$_POST['data'],MCRYPT_MODE_ECB,$iv);
fwrite($handle,'crypt= '.$crypt_text.PHP_EOL);
fwrite($handle,'crypt_encode= '.base64_encode($crypt_text).PHP_EOL);
fclose($handle);
header('Cache-control: private');
header('Content-Type: application/octet-stream');
header('Content-Length: '.filesize($tmpfname));
header('Content-Disposition: filename=test.txt');
$file = fopen($tmpfname, "r");
while(!feof($file))
{
print fread($file,filesize($tmpfname));
flush();
}
fclose($file);
unlink($tmpfname);
}
else
{
echo 'error, data null';
}
exit();
}
?>
</html>