YBET informatique Rue Albert 1er, 7 6810 Pin - Chiny Route Arlon - Florenville (/fax: 061/32.00.15 |
Les formations sur la création de sites internet et les langagues |
|
Magasin YBET informatique | Comment créer un site |
1 Introduction - 2. Méthodes d'encryptage - 3. Exemple d'utilisation
Lorsque nous avons utilisé les Cookies, nous n'avons pas coder le mot de passe. Ceci pose quelques problèmes de sécurité. Cette partie va nous permettre d'étudier quelques fonctions. J'essayerais d'être le plus simple possible. Pourtant, les fonctions PHP permettant de crypter et de décrypter un texte sont suffisamment nombreuses pour en rebuter plus d'un. En plus, les fonctions PHP permettent une multitude de possibilités liées à la méthode de cryptage (encore une bonne raison d'essayer de faire simple en n'en voyant que quelques unes).
Reprenons la gestion des cookies comme vu précédemment lors de la connexion d'un utilisateur (sans la partie vérification dans la base de donnée). Dans l'exemple ci-dessous, le nom du cookies est YBET. Le contenu reprend le login suivi de -pw- puis seulement le mot de passe. Nous avons volontairement supprimé le timestamp pour ne pas compliquer. Cette partie vérifie donc la présence du cookies ybet, et récupère le login et mot de passe s'il n'existe pas.
if(!isset($_COOKIE['ybet'])) { echo"Vous n'êtes pas encore inscrit ou connecté"; }else{ $cookies=$_COOKIE['ybet']; $cookies_array=array(); $cookies_array=Explode("-pw-",$cookies); $login=$cookies_array[0]; $password=$cookies_array[1]; ) |
A l'inverse, lorsque nous récupérons le login et le mot de passe dans la base de donnée, la création du cookie est
Setcookie('ybet',$login."-pw-".$password); |
Dans le cas général, le cryptage utilise une clé. C'est une suite de lettres (ou une phrase) qui est connue des deux parties. Dans notre cas, la clé est uniquement connue par le serveur qui crypte le mot de passe lors de la création et le décrypte lors de la récupération par le cookies.
D'un autre coté, il y a différentes méthodes, on parle d'algorithme, du plus simple au plus compliqué.
En dernier, il y a la méthode de gestion du login et du mot de passe (vous pouvez éventuellement ne crypter que le mot de passe).
La fonction (ou plutôt la bibliothèque) mcrypt accessible depuis PHP 4.0.2 permet une large panoplie d'algorithmes de chiffrement, tels que DES, DES, TripleDES, Blowfish (par défaut), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2 et GOST en modes CBC, OFB, CFB et ECB. Elle accepte également RC6 et IDEA qui ne sont pas considérés comme libres de droits. La majorité utilisent un chiffrement sur 64 bits.
La commande de chiffrement est:
$texte_chiffre = mcrypt_encrypt($algo, $clef, $texte, $mode, $iv); où:
|
La commande de déchiffrement est:
$texte_dechiffre = mcrypt_decrypt($algo,$clef,$texte_chiffre,$mode,$iv);
où:
|
Les modes de chiffrement et de déchiffrage doivent forcément être les mêmes!.
Des variables sont préprogrammées pour les
différentes méthodes de cryptage comme par exemple::
|
Au niveau du mode de cryptage, on en retrouve 4 utilisables avec la commande Mcrypt:
|
Une remarque, certaines erreurs sont liées au paramétrage du fichier php.ini et tous les algorithme ne sont pas implantés sur tous les serveurs. EasyPhp n'accepte normalement aucune méthode de chiffrement. Ces tests doivent dont être exécutés directement sur un serveur Internet.
Commençons par un cryptage simple, algorythme BLOWFICH en mode CBC (donc sans vecteur d'initialisation)
<?php echo "------------ mode CBC"; $algo = MCRYPT_BLOWFISH; $mode = MCRYPT_MODE_CBC; $key_size = mcrypt_module_get_algo_key_size($algo); $iv = mcrypt_create_iv(mcrypt_get_iv_size($algo, $mode), MCRYPT_RAND); // choix d'une clé secrète de cryptage/décryptage et mise à longueur $cle= "Ceci est la clé du cryptage utilisée par nous"; $cle= substr($cle, 0, $key_size); // Phrase à crypter et cryptage $texte= "texte à crypter"; $chiffre= mcrypt_encrypt($algo, $cle, $texte, $mode,$iv); // Décryptage de contrôle $dechiffre = mcrypt_decrypt($algo, $cle, $chiffre, $mode,$iv); // affichage de contrôle echo "<p>Texte à crypter: <b>".$texte. "</b></p><p> Texte chiffre: <b>" .$chiffre. "</b></p> <p> Mot de passe décrypter: <b>" .$dechiffre."</b><br />"; ?> |
Une autre méthode utilisant un vecteur d'initialisation, plus sécurisée mais plus complexe à mettre en oeuvre:
<?php echo "------------ BLOWFISH avec mode NOFB -----------"; // choix d'un algo, mode Mot de passe à crypter: ".$texte. " Mot de passe crypté: " .$chiffre. " Mot de passe décrypté: " .$dechiffre." ";?> |
Le résultat nous donne:
------------ BLOWFISH mode CBC ------------------Mot de passe à chiffrer: texte à crypter
Mot de passe chiffre:
Mot de passe déchiffrer:
------------ BLOWFISH avec mode NOFB -----------Mot de passe à crypter: Mot de passe à crypter
Mot de passe crypté:Mot de passe décrypté:
Pas très difficile en théorie, tant que vous avez correctement sélectionner les paramètres. Il ne reste plus qu'à l'implanter dans la gestion des cookies et la relier à la table utilisateurs. Mais çà c'est une autre histoire.
Cette partie va être modifiée dans les semaines qui viennent, la gestion ci-dessus du cryptage - décryptage ne fonctionne pas avec les dernières versions de PHP 5.3, avec en plus des messages d'erreurs.
> 26.1 . Les cookies avec contenu crypté |
<25 . Gestion FTP, dossiers et fichiers en FTP |
Mise en ligne: 27/03/2008