PHP : Mcrypt : Chiffrer, déchiffrer un message

Qui a besoin de chiffrer, puis déchiffrer de manière simple un message ?

 

Utilisons PHP et sa librairie MCrypt ;-)

La méthode simple !

La méthode simple fait principalement appel aux fonctions 'mcrypt_encrypt()' et 'mcrypt_decrypt()'...

 

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";

function make_key_resized($key) {
        global $algo;

        // obtenir la taille de cle maximale supportée par l'algorythme mcrypt choisi
        $size = mcrypt_module_get_algo_key_size($algo);

        // réduire notre clé selon la taille maximale supportée
        $key = substr($key, 0, $size);

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

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

 

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

 

On génére un vecteur d'initialisation nécessaire
- pour info, si on utilise le mode ecb, ce vecteur sera purement et simplement ignoré -

 


<?php
$source = ""; // peut être vide, dev_random, dev_urandom

function make_iv() {
        global $algo,$mode,$source;

        switch($src) {
                case "dev_random":
                        // on créé un vecteur d'initialisation selon la taille maximale possible
                        $iv = mcrypt_create_iv(mcrypt_get_iv_size($algo, $mode), MCRYPT_DEV_RANDOM);
                break;
                case "dev_urandom":
                        $iv = mcrypt_create_iv(mcrypt_get_iv_size($algo, $mode), MCRYPT_DEV_URANDOM);
                break;
                default:
                        $iv = mcrypt_create_iv(mcrypt_get_iv_size($algo, $mode), MCRYPT_RAND);
                break;
        }

        return $iv;
}

$iv = make_iv();
?>
 

 

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

 


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

function encrypt_to_mcrypt($message) {
        global $key,$algo,$mode,$iv;

        // on chiffre le message aprés l'avoir serialisé - pratique si le message est une variable $array, par exemple
        $data = mcrypt_encrypt($algo, $key, serialize($message), $mode, $iv);

        // on retourne le message après l'avoir encodé en base64 - pratique si on veut mettre le résultat dans une base de donnée.
        return trim(base64_encode($data));
}

$datas_crypted = encrypt_to_mcrypt($key,$message,$algo,$mode,$iv);

// juste pour savoir - ne pas utiliser ensuite ;-)
var_dump($datas_crypted);
string(96) "K8heN7M1OZvwQH3B7iM8/nK5RzghmwJka7f2TbmPyw76UuOLWoSLyiQ9BzvomH0KRmktLfOAz5DlX0L9CfdjUKS04LdukA=="
?>
 

 

Les données sont ainsi chiffrées !

 

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


<?php
function decrypt_to_mcrypt($message) {
        global $key,$algo,$mode,$iv;

        // on dechiffre le message après l'avoir décodé en base64
        $data = mcrypt_decrypt($algo, $key, base64_decode($message), $mode, $iv);

        // on retourne le message déserialisé
        return unserialize($data);
}

$message = decrypt_to_mcrypt($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_chiffrer-dechiffrer : |>>


 

 

^ Haut de page ^