PHP : Mcrypt : utiliser les fonctions avancées

 

Utilisons PHP et sa librairie MCrypt ;-)

La méthode avancée !

La manière avancée d'utiliser la bibliothèque mcrypt est d'utiliser les fonctions 'mcrypt_generic()' et 'mdecrypt_generic()'.

 

En premier lieu, il nous faut générer une clé.

 

 


<?php
$key = "votre_cle_de_plusieurs_caracteres";

// algorythme choisi selon http://fr.php.net/manual/fr/mcrypt.ciphers.php
$algo = "blowfish";
// mode choisi selon http://fr.php.net/manual/fr/mcrypt.constants.php
$mode = "cbc";

// on commence par ouvrir le module et le mode choisis
$td = mcrypt_module_open($algo, "", $mode, "");

// on créé le vecteur d'initialisation nécessaire
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);


function make_key_enc_resized($key) {
        global $td;
        // on retourne la taille maximale supportée
        $size = mcrypt_enc_get_key_size($td);
        $key = substr($key, 0, $size);

        return $key;
        unset($size,$key);
}

// on retaille notre clé ;-)
$key = make_key_enc_resized($key);
?>
 

 

Maintenant que la clé est générée, on la garde jalousement, sans la révéler à quiconque !

 

Puis on va se servir de la fonction 'mcrypt_generic()', pour chiffrer toutes données :

 


<?php
$message = "Ceci est le message hyper important qu'il me faut absolument chiffrer!";

function encrypt_to_mcrypt_advanced($data) {
        global $key,$td,$iv;

        // on initiliase le buffer nécessaire
        mcrypt_generic_init($td, $key, $iv);

        // on chiffre la donnée après l'avoir serialisé
        $data = mcrypt_generic($td, serialize($data));

        // on décharge le module - libére la mémoire
        mcrypt_generic_deinit($td);

        // on décharge complétement, proprement le module
        mcrypt_module_close($td);

        // on retourne la donnée chiffrée et encodée en base64
        return base64_encode($data);
        unset($data);
}

$datas_crypted = encrypt_to_mcrypt_advanced($message);

// juste pour savoir - ne pas utiliser ensuite ;-)
var_dump($datas_crypted);
string(96) "ndgDC4gbNJN1LfXJK+Z65P2tK92TvE4iUGupx2VcugvD2SwaerKxCCzIkicmbdErcROmqsd9RyczMQEc/r3s7seLVuPugWtTkhsfUjQu"
?>
 

 

Les données sont ainsi chiffrées !

 

Pour les déchiffrer, il suffit d'utiliser la fonction inverse 'mdecrypt_generic()' :


<?php
function decrypt_to_mcrypt_advanced($data) {
        global $key,$td,$iv;

        mcrypt_generic_init($td, $key, $iv);

        // on déchiffre les données après les avoir décodées en base64
        $data = mdecrypt_generic($td, base64_decode($data));

        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);

        // on retourne les données après les avoir déserialisées.
        return unserialize($data);
        unset($data);
}

// il est nécessaire d'ouvrir à nouveau le module
$td = mcrypt_module_open($algo, "", $mode, "");

// il n'est pas nécessaire de générer à nouveau le vecteur d'initialisation
//  pensez à le récupérer, ainsi que votre clé retaillée.
$message = decrypt_to_mcrypt_advanced($datas_crypted);

echo $message; // nous restitue le message d'origine ;-)
?>
 

 

Allez, faites donc bon usage de ces fonctions, et amusez-vous à chiffrer vos messages si importants.

 

 


<<| Page : PHP : code : mcrypt_fonctions-avancees : |>>


 

 

^ Haut de page ^