• STATISTIQUES
  • Il y a eu un total de 1 membres et 19500 visiteurs sur le site dans les dernières 24h pour un total de 19 501 personnes!


    Membres: 2 608
    Discussions: 3 580
    Messages: 32 820
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [EN] Reddit
    Subreddit dédié à la sécurité informatique.
    Hacking
    [EN] osix
    Site de challenge qui utilise un système de level on chaque épreuve doit être réussie avant d'accédÃ...
    Challenges
    [EN] xda-developers
    Très bon site pour les gros bidouilleurs de smartphone de windows à androïd et de Apple jusqu'...
    Phreaking
    [EN] Hack This Site
    Hack This Site est considéré comme un réel terrain d'entraînement légal pour le...
    Hacking
    [FR] apprendre-a-manipuler
    Site d'apprentissage de la manipulation d'autrui.
    Hacking
    [EN] This is legal
    Basic: 10, Realistic: 5, Programming: 1, Bonus: 11, SQL: 2, Encryption: 6, Application: 4, User Contributed: 3
    Challenges
    [EN] Gekko
    Site de challenge présenter sous la forme d'une quête. Vous êtes un agent secret qui répond sous le nom...
    Challenges

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!

    €



Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[Php] Chiffrement/Stéganographie de donnée sous la forme d'un array multi-dimension
30-07-2012, 09h20 (Modification du message : 19-11-2012, 18h42 par InstinctHack.)
Message : #1
InstinctHack Hors ligne
Posting Freak
*



Messages : 1,366
Sujets : 184
Points: 299
Inscription : Dec 2011
[Php] Chiffrement/Stéganographie de donnée sous la forme d'un array multi-dimension
Voilà sur quoi je travaille actuellement, c'est pas encore fonctionnel mais bientot Smile
Je vous le met après avoir effectuer quelques opérations d' ""obscuration"" simple :p (juste pour éviter les kikoo lol et les script-kiddis :p et puis avouez que les défis vous adorez ça et celui-là c'est trop facile)
Si vous avez des questions, des propositions, n'hésitez-pas, je suis toujours dispo Wink

J'ai BEAUCOUP améliorer le systeme en javascript Smile
Code PHP :
<?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 )
            {
                
$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);
        
$pictureimagecreatetruecolor(35,35);
        
imagealphablending($picture,true);
        
imagesavealpha($picturefalse);

        
$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);

        
$pictureimagecreatetruecolor(35,35);
        
imagealphablending($picture,true);
        
imagesavealpha($picturefalse);

        
$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> 
Citation :un jour en cours de java j'ai attrapé les seins d'une fille mais elle m'a frappé en disant "c'est privé !!"
j'ai pas compris pourquoi, je croyais qu'on était dans la même classe
+1 (0) -1 (0) Répondre
30-07-2012, 09h42
Message : #2
fr0g Hors ligne
NTEuNDI2MzcsLTEuNzc4NDg4
*****



Messages : 348
Sujets : 22
Points: 56
Inscription : Aug 2011
RE
Joli travail bro', pressé de voir ça terminé Smile
+1 (0) -1 (0) Répondre
30-07-2012, 12h56
Message : #3
Luxerails Hors ligne
Bon membre
*



Messages : 267
Sujets : 6
Points: 67
Inscription : Aug 2011
RE: Système de chiffrement..
(ahah je me suis bien fait avoir par le coup du exit()..)
Mais svp >< arrêtez avec la sténographie. C'est la stéganographie. Ça n'a rien avoir.
http://fr.wikipedia.org/wiki/St%C3%A9nographie
http://fr.wikipedia.org/wiki/St%C3%A9ganographie
+1 (0) -1 (0) Répondre
30-07-2012, 20h57
Message : #4
InstinctHack Hors ligne
Posting Freak
*



Messages : 1,366
Sujets : 184
Points: 299
Inscription : Dec 2011
RE: Système de chiffrement..
(30-07-2012, 12h56)Luxerails a écrit : (ahah je me suis bien fait avoir par le coup du exit()..)
LOL

(30-07-2012, 12h56)Luxerails a écrit : Mais svp >< arrêtez avec la sténographie. C'est la stéganographie. Ça n'a rien avoir.
http://fr.wikipedia.org/wiki/St%C3%A9nographie
http://fr.wikipedia.org/wiki/St%C3%A9ganographie

Regarde que je l'est bien écrit dans le titre du sujet :p Je corrigerais.
Citation :un jour en cours de java j'ai attrapé les seins d'une fille mais elle m'a frappé en disant "c'est privé !!"
j'ai pas compris pourquoi, je croyais qu'on était dans la même classe
+1 (0) -1 (0) Répondre
30-07-2012, 21h00
Message : #5
Di0Sasm Hors ligne
Chimiste
*******



Messages : 924
Sujets : 56
Points: 91
Inscription : Aug 2011
RE: Chiffrement/Stéganographie de donnée sous la forme d'un array multi-dimension
Je l'ai modifié dude Smile
+1 (0) -1 (0) Répondre
01-08-2012, 19h07
Message : #6
tlk_ Hors ligne
Newbie
*



Messages : 2
Sujets : 1
Points: 0
Inscription : Jun 2012
RE: Chiffrement/Stéganographie de donnée sous la forme d'un array multi-dimension
Pas trop compris pourquoi tu as foutu ton code en b64. Quand je décode ça me fait légèrement un carnage avec le charset. Tu peux pas le poster normal ? :/
+1 (0) -1 (0) Répondre
01-08-2012, 19h08
Message : #7
Luxerails Hors ligne
Bon membre
*



Messages : 267
Sujets : 6
Points: 67
Inscription : Aug 2011
RE: Chiffrement/Stéganographie de donnée sous la forme d'un array multi-dimension
Normal le "carnage avec le charset", après décodage base64 c'est encore obfusqué. Quelques coups de str_replace suffisent Smile
+1 (0) -1 (0) Répondre
01-08-2012, 19h10
Message : #8
supersnail Hors ligne
Éleveur d'ornithorynques
*******



Messages : 1,610
Sujets : 72
Points: 466
Inscription : Jan 2012
RE: Chiffrement/Stéganographie de donnée sous la forme d'un array multi-dimension
Citation :Je vous le met après avoir effectuer quelques opérations d' ""obscuration"" simple Tongue (juste pour éviter les kikoo lol et les script-kiddis Tongue

Tu es donc considéré comme un kikoo lol et un script-kiddis, même si cette protection n'apporte rien vu que les sk et kikoolols sont éliminés par le système de présentations (et btw je hais le cryptoshit donc j'ai pas regardé :'') ). You lost the game so :þ
Mon blog

Code :
push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp

"VIM est merveilleux" © supersnail
+1 (0) -1 (0) Répondre
01-08-2012, 20h08 (Modification du message : 03-08-2012, 11h41 par InstinctHack.)
Message : #9
InstinctHack Hors ligne
Posting Freak
*



Messages : 1,366
Sujets : 184
Points: 299
Inscription : Dec 2011
RE: Chiffrement/Stéganographie de donnée sous la forme d'un array multi-dimension
(01-08-2012, 19h07)tlk_ a écrit : Pas trop compris pourquoi tu as foutu ton code en b64. Quand je décode ça me fait légèrement un carnage avec le charset. Tu peux pas le poster normal ? :/
(01-08-2012, 19h08)Luxerails a écrit : Normal le "carnage avec le charset", après décodage base64 c'est encore obfusqué. Quelques coups de str_replace suffisent Smile

Code PHP :
<?php print_r(str_split(base64_encode(str_replace(array(">",'<','(',')'),array("¶",'☺','♥','♫'),file_get_contents('data_absolue.php'))),100)); 
voilà la résolution du probleme Smile
Citation :un jour en cours de java j'ai attrapé les seins d'une fille mais elle m'a frappé en disant "c'est privé !!"
j'ai pas compris pourquoi, je croyais qu'on était dans la même classe
+1 (0) -1 (0) Répondre
01-08-2012, 20h14
Message : #10
ark Hors ligne
Psyckomodo!
*****



Messages : 1,033
Sujets : 48
Points: 317
Inscription : Sep 2011
RE: Chiffrement/Stéganographie de donnée sous la forme d'un array multi-dimension
Wai, moi j'ai juste passer le b64, j'avais la flemme après :p
Khaled: J'ai regarder en speed ton truc de stegano, je testerais tout ca ce week end. Pas trop le temps la...

aaSSfxxx: >.< I lost the game. Sinon, +1 on est pas censé avoir de SK et kikoolol.
+1 (0) -1 (0) Répondre
02-08-2012, 20h21
Message : #11
Luxerails Hors ligne
Bon membre
*



Messages : 267
Sujets : 6
Points: 67
Inscription : Aug 2011
RE: Chiffrement/Stéganographie de donnée sous la forme d'un array multi-dimension
Heu.. ouais.. mais elle est où la stégano ? Tongue Il faudrait un support où cacher l'image générée (là ça fait plus crypto. En stéga l'image doit passer inaperçue). L'url du tux n'est jamais utilisée dans la fonction... Peut-être par exemple convertir les valeurs des composantes dans l'ordre en binaire 8 bit et ensuite cacher les différents bits à travers l'image dans les bits de poids faible. Sinon pour l'algo en lui même j'ai pas trop regardé mais tu es sur que c'est reversible ? :p
+1 (0) -1 (0) Répondre
03-08-2012, 11h29 (Modification du message : 03-08-2012, 11h42 par InstinctHack.)
Message : #12
InstinctHack Hors ligne
Posting Freak
*



Messages : 1,366
Sujets : 184
Points: 299
Inscription : Dec 2011
RE: Chiffrement/Stéganographie de donnée sous la forme d'un array multi-dimension
@Luxerails
C'est parce que je preferais travailler sur une image vide pour le moment ( je compliquer progressivement Smile )
si l'url n'est pas utiliser, elle le seras prochainement Smile
"Peut-être par exemple convertir les valeurs des composantes dans l'ordre en binaire 8 bit et ensuite cacher les différents bits à travers l'image dans les bits de poids faible"
C'est le cas Wink

Pour le coté reversible, je pense que oui (pas eus le temps de le faire) mais faut passer plusieurs paramètres et cela me gene (je vais essayer de trouver une parade )
paramètres :
image
taille de la chaine (car en base64, 000000 vaut "A" et non "null" )
taille des blocs (entre l'intervalle compris [1-8] qui définit le nombre de bit qu'utilise la stégano ) jusqu'a 4 l'altération de l'image est faible

Voilà j'avance petit à petit Smile
le code actuel : voir en première page
Citation :un jour en cours de java j'ai attrapé les seins d'une fille mais elle m'a frappé en disant "c'est privé !!"
j'ai pas compris pourquoi, je croyais qu'on était dans la même classe
+1 (0) -1 (0) Répondre
09-08-2012, 10h45
Message : #13
InstinctHack Hors ligne
Posting Freak
*



Messages : 1,366
Sujets : 184
Points: 299
Inscription : Dec 2011
RE: Chiffrement/Stéganographie de donnée sous la forme d'un array multi-dimension
Grandes avancés dans le script par rapport à la création des données Smile
Citation :un jour en cours de java j'ai attrapé les seins d'une fille mais elle m'a frappé en disant "c'est privé !!"
j'ai pas compris pourquoi, je croyais qu'on était dans la même classe
+1 (0) -1 (0) Répondre


Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  Tester les sous-domaines d'un site cacaphonie 5 372 29-12-2014, 04h23
Dernier message: GreenBlood
  chercher des sous-chaines dans une chaine et dans l'ordre gruik 13 457 21-03-2014, 14h02
Dernier message: b0fh
  [Python] La stéganographie BMP Kiwazaru 1 201 02-07-2013, 23h29
Dernier message: oosfalte
  [JavaScript] Fonction Array Shirobi 18 624 29-10-2012, 22h36
Dernier message: InstinctHack
  [UNDEFINED] Chiffrement RSA plus Key ? InstinctHack 4 184 26-09-2012, 15h26
Dernier message: InstinctHack
  [Php] Chiffrement de données Apache9 15 787 11-07-2012, 18h38
Dernier message: Booster2ooo
  [Php] Toutes les méthodes pour faire une sauvegarde de la base de donnée CyberSee 0 119 05-07-2011, 19h42
Dernier message: CyberSee

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut