TUTORIELS 
Chiffrement réversible en PHP
Une librairie gratuite permet de se doter de nombreux algorithmes de chiffrement/déchiffrement. Présentation.  (20 mai 2003)
 

Comme promis à la fin de notre article sur le chiffrement de mots de passe utilisateur en PHP, nous abordons ici le cas du chiffrement réversible, toujours en PHP, qui nous permettra de passer une information entre l'utilisateur et le serveur, ou entre deux applications du serveur, de manière sécurisée.
Nous aborderons ici le cas où il existe une clé unique qui sert à chiffrer/déchiffrer les chaînes de caractères...

La manière la plus simple de parvenir à ce résultat est de passer par la bibliothèque mcrypt(), qui offre une large sélection de méthodes de chiffrement parmi les plus connus et est disponible en téléchargement.

Deux modes nous intéressent ici, de toute évidence: le chiffrement et le déchiffrement. On peut donc construire au sein d'un fichier global.php (par exemple), qui contiendrait nos variables et fonctions globales, les deux fonctions suivantes:

(fichier global.php)
<?php
function chiffre($texte, $cle)
  {
  $td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, "", MCRYPT_MODE_ECB, "");
  mcrypt_generic_init($td, $cle, 0);
  $temp = mcrypt_generic($td, $texte);
  mcrypt_generic_end ($td);
  return $temp;
  }
?>

Etudions notre fonction chiffre(), qui prend en arguments $texte, le texte à chiffre, et $cle, la clé qui devra être utilisée pour le déchiffrement. Tous deux sont des chaînes de caractères laissées à la discrétion de l'utilisateur.

mcrypt_module_open() ouvre le module de l'algorithme de chiffrement utilisé (ici, Rijndael 256) en indiquant le mode de chiffrement voulu (ici, ECB, pour electronic codebook, idéal pour les clés). L'appel de cette fonction est stocké dans la variable $td.

mcrypt_generic_init()
initialise les buffers avec notre appel de fonction, notre clé et un vecteur d'initalisation nul (car le mode ECB n'en a pas besoin).

mcrypt_generic() est la fonction qui lance le chiffrement, le résultat étant stocké dans la variable temporaire $temp.

mcrypt_generic_end()
nous permet d'arrêter le "moteur" de chiffrement.
Enfin, notre fonction renvoi la valeur contenue dans $temp. Libre à l'utilisateur de modifier ce code pour la stocker, l'envoyer par mail ou autre...

Notre fonction dechiffre(), maintenant:

(fichier global.php, suite)
<?php
function dechiffre($texte, $cle)
  {
  $td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, "", MCRYPT_MODE_ECB, "");
  mcrypt_generic_init($td, $cle, 0);
  $temp = mdecrypt_generic($td, $texte);
  mcrypt_generic_end ($td);

  return $temp;
  }
?>

La différence ne se situe qu'au niveau de l'appel de fonction: pour le chiffrement, c'est mcrypt_generic(), tandis que pour le déchiffrement, c'est mdecrypt_generic(). Le reste de la fonction est identique à chiffre(): les explications de la première s'appliquent à la seconde.

 
[ Xavier Borderie,JDNet
 
Accueil | Haut de page