Formations privées

Rue Albert 1er, 7

6810 Pin - Chiny

(/fax: 061/32.00.15

Formation PHP - MySql en ligne

Formation Webmaster

Formation: apprenez à créer et référencer votre propre site Internet

FORMATIONS

Le MAGASIN YBET

PRODUITS et SERVICES

Formations informatiques privées

Activités et présentation

Logiciels de gestion

Access - Excel

Rayon d'action

Logiciel compta CIEL
YBET informatique Forum Création de site Vente informatique en ligne
Dans l'actualité sur Internet:
(moteurs, hébergement, référencement et création de sites, ...)
Les chapitres de la formation en ligne PHP - MySQL
1. Introduction au Php
2. Installer et utiliser easyphp
3. Première commande PHP
4. Fonctions en PHP
5. Les tableaux
6. Fonctions sur les variables
7. Formulaires Mail
8. Base de donnée MySQL avec easyphp
9. Première application de Mysql
10. Gestion des tables par PHP
10.a Exercice: formulaire de contact
11. Mise en page PHP - HTM: include() - require()
12. Création automatique de la table utilisateur
13. Formulaire et vérification des données
14. Insertion des nouveaux membres
15. Gestion des catégories
16. Liste de choix déroulante
17. Modification des tables MySQL avec des commandes PHP.
18. Enregistrer un fichier via un formulaire
19. Formulaire d'insertion des annonces
20. Affichage des petites annonces
21. Filtrage des annonces (1)
23. Exercice: gérer des news
24. Utilisation des Cookies
25. Gestion fichiers et Dossiers (source et FTP)
26. Cryptage et décryptage de mots de passe
27. Base relationnelle, méthodes Left et Join.
Divers
Formation référencement en ligne, positionnez votre site sur Google, MSN, Yahoo, ...
Les feuilles de styles, utilisation du CSS.
FrontPage et l'HTML, cours en ligne
Le fichier Apache .htaccess, configuration serveur, URL Rewriting, accès répertoires.

26. Le cryptage des données en PHP.

1 Introduction - 2. Méthodes d'encryptage - 3. Récupérer les cookies - 4. Exemple d'utilisation: login - mot de passe - 5. Mise à jour du cookie - 6. Vérification de l'utilisateur - 7. Gestion des utilisateurs dans les pages - 8. Pour conclure

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

2. Méthodes d'encryptage.

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

  • Soit, vous crypter dans le cookies et dans la table utilisateur. Dans ce cas, vous pouvez directement faire correspondre les deux.
  • Dans l'autre cas (non conseillé), vous ne cryptez que le contenu du cookies. Cette solution permet de voire le mot de passe en clair dans la table.

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ù:

  • $algo est l'algorithme utilisé, différentes variables sont associées (voire ci-dessous)

  • $clef est la clé de chiffrement, connue uniquement par le serveur. C'est une phrase de 64 bits (lettres) maximum.

  • $texte, le texte (mot de passe, login, ...) à chiffrer.

  • $mode, est spécifique à chaque méthode de chiffrement (algorithme).

  • $iv est un vecteur d'initialisation utilisé pour quelques modes (CBC, CFB, OFB, et dans certains algorithmes de mode STREAM). Si ce vecteur est nécessaire, la fonction renvoie une alerte et utilise une suite de caractère \0

La commande de déchiffrement est:

$texte_dechiffre = mcrypt_decrypt($algo,$clef,$texte_chiffre,$mode,$iv);

où:

  • $algo est l'algorithme utilisé
  • $clef est la clé de chiffrement, connue uniquement par le serveur. C'est une phrase de 64 bits (lettres) maximum.
  • $texte_chiffre est le texte à décrypter. 
  • $mode, est spécifique à chaque méthode de chiffrement (algorithme).
  • $iv est le vecteur d'initialisation.

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::
  • MCRYPT_MODE_CBC pour le mode CBC
  • MCRYPT_BLOWFISH
  • MCRYPT_CAST_256
  • MCRYPT_DES
  • MCRYPT_TRIPLEDES
  • .....

Au niveau du mode de cryptage, on en retrouve 4 utilisables avec la commande Mcrypt:

  • cfb, associé à MCRYPT_MODE_CFB, chiffrement par flux de clés qui est ensuite appliqué sur le texte, le flux suivant est obtenu à partir du précédant bloc,  iv obligatoire
  • ofb, associé à MCRYPT_MODE_OFB, similaire au mode cfb, iv obligatoire
  • cbc, associé à MCRYPT_MODE_CBC, enchaînement des blocs avec une fonction OU exclusif avec le chiffrage du bloc précédant, iv optionnel
  • ecb, associé à MCRYPT_MODE_ECB, la méthode la plus simple. Le texte est découpé en blocs cryptés les uns après les autres.
  • nofb, associé à la variable MCRYPT_MODE_NOFB, identique à OFB mais plus sécurisé, avec iv.

3. Exemples d'utilisation.

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

// choix d'une clé secrète de cryptage/décryptage et mise à longueur
$cle= "Ceci est la clé du cryptage utilisée par ybet informatique";
$cle= substr($cle, 0, $key_size);
// Phrase à crypter et cryptage
$texte= "texte à crypter";
$chiffre= mcrypt_encrypt($algo, $cle, $texte, $mode);
// Décryptage de contrôle
$dechiffre = mcrypt_decrypt($algo, $cle, $chiffre, $mode);
// 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
$algo = MCRYPT_BLOWFISH;
$mode = MCRYPT_MODE_NOFB;
// calcul des longueurs max de la clé et de l'IV
$key_size = mcrypt_module_get_algo_key_size($algo);
$iv_size = mcrypt_get_iv_size($algo, $mode);
// création d'un IV de la bonne longueur débutant par exemple de iv suivi de 0
$iv= mcrypt_create_iv($iv_size, substr("exemple de iv",0,$iv_size));
// choix d'une clé secrète de chiffrement et mise à longueur suivant l'algorithme et le mode associé
$cle= "Ceci est la clé du cryptage utilisée par ybet informatique";
$cle= substr($cle, 0, $key_size);
// Phrase à crypter et cryptage
$texte= "Mon mot de passe à crypter";
$chiffre= mcrypt_encrypt($algo, $cle, $texte, $mode, $iv);
// Décryptage
$dechiffre = mcrypt_decrypt($algo, $cle, $chiffre, $mode, $iv);
// affichage
echo "

Mot de passe à crypter: ".$texte. "


Mot de passe crypté: " .$chiffre. "


Mot de passe décrypté: " .$dechiffre."

";
?>

Le résultat nous donne:

------------ BLOWFISH mode CBC ------------------
Warning: mcrypt_encrypt() [function.mcrypt-encrypt]: Attempt to use an empty IV, which is NOT recommend in /home/ybet/www/internet14/php-26.php on line 554

Warning: mcrypt_decrypt() [function.mcrypt-decrypt]: Attempt to use an empty IV, which is NOT recommend in /home/ybet/www/internet14/php-26.php on line 556

Mot de passe à chiffrer: texte à crypter

Mot de passe chiffre: ¯vÔ८FÊšÆy“&

Mot de passe déchiffrer: texte à crypter

------------ BLOWFISH avec mode NOFB -----------
Warning: mcrypt_create_iv() expects parameter 2 to be long, string given in /home/ybet/www/internet14/php-26.php on line 568

Warning: mcrypt_encrypt() [function.mcrypt-encrypt]: The IV parameter must be as long as the blocksize in /home/ybet/www/internet14/php-26.php on line 574

Warning: mcrypt_decrypt() [function.mcrypt-decrypt]: The IV parameter must be as long as the blocksize in /home/ybet/www/internet14/php-26.php on line 576

Mot de passe à crypter: Mot de passe à crypter

Mot de passe crypté: Ì™ËTA«v"µ'>=(ÆjÒZà´3R

Mot de passe décrypté: Mot de passe à crypter

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.

> 27 . Base de donnée relationnelle MySQL
<25 . Gestion FTP, dossiers et fichiers en FTP

YBET Informatique: formation débutant ou avancé

dans notre salle de formation ou en entreprise

Renseignements, tarifs et inscriptions sur notre page formations informatiques

Magasin Informatique YBET à Chiny

Mise en ligne: 27/03/2008