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.
|