Dans ce tuto PHP gratuit, en vidéo, vous apprendrez à crypter et à décrypter un mot de passe, ce qui peut éventuellement servir lors d'une inscription sur votre site pour crypter le mot de passe renseigné par le visiteur avant de l'insérer en base de données, puis à décrypter ce mot de passe en cas d'oubli par le visiteur pour lui renvoyer son mot de passe par email, par exemple.

Bon tuto!

Jetez un oeil à ces autres tuto Php 5.3

Créer votre propre package composerCréer votre propre package…
Dans ce tutoriel PHP en vidéo, nous allons voir comment créer…

Apprendre PHP & MySQL à partir de zéroApprendre PHP & MySQL à partir…
Dans cette formation apprendre PHP & MySQL à partir de zéro,…

Créer l'espace d'administration  d'un site E-commerceCréer l'espace d'administration…
Voici une formation Créer un espace d'administration (Back-office)…

Manipulez vos images en PHP avec ImagineManipulez vos images en PHP…
Dans ce tuo PHP en vidéo, vous apprendrez à utiliser la librairie…

Créer un site E-commerce avec Php & PaypalCréer un site E-commerce…
Dans cette formation Créer un site E-commerce en Php avec un…

Créer l'espace d'administration  d'un site E-commerceCréer l'espace d'administration…
Voici une formation Créer un espace d'administration (Back-office)…

Apprendre PHP & MySQL à partir de zéroApprendre PHP & MySQL à partir…
Dans cette formation apprendre PHP & MySQL à partir de zéro,…

HTML2PDF : Générer des documents PDF à partir du code HTMLHTML2PDF : Générer des documents…
Dans ce tuto Générer des documents PDF à partir du code HTML…

Pour vous faire un avis, voici un extrait de quelques secondes. La version complète et téléchargeable de ce tuto Php 5.3 de 7 minutes est proposée dans une résolution plus grande que l’extrait suivant :

Partagez cet extrait

Lien vers cet extrait : Embed code :

simpledev , formateur certifié



Toutes les formations de Simpledev


Témoignage des clients de simpledev

Des tuto de qualité et bien expliqués.

Les tutos sont bien expliqués.

Super tuto, rien à dire. merci

Bonjour, vidéos bien expliquées sur Créer un blog avec Node.js

Un très bon formateur qui va au bout de ses explications. Ses tutoriels sont de qualité et je les recommande fortement ! Merci à vous pour ce que vous m'avez appris !

Lire les autres témoignages

 

D'autres tuto de simpledev

Utiliser les Jointures en PHPUtiliser les Jointures en PHP
Dans ce tuto PHP en vidéo, nous verrons comment utiliser les jointures dans un cas pratique.…

Les jointuresLes jointures
Dans ce tuto Codeigniter gratuit, en vidéo, nous verrons comment utiliser les jointures…

Créer une librairie CodeigniterCréer une librairie Codeigniter
Dans ce tuto Codeigniter gratuit en vidéo, vous apprendrez à créer une librairie Codeigniter.…

Notification instantanéeNotification instantanée
Dans ce tuto AJAX en vidéo, nous verrons comment réaliser un système de notification…

voir tous les tuto de simpledev

Notes attribuées par les utilisateurs (11 votes)

Note moyenne des utilisateurs  

Votez pour ce tuto


 

Les avis / Questions des utilisateurs (17)

par Toutkoola voté :
(a téléchargé ce tuto - 13 mai 2014)

" Le tutoriel en lui même est bon, le ton du narrateur est parfait, cependant il manque d'informations sur ce que représente l'utilisation de toutes les fonctions, constantes etc et se contente simplement de montrer comment encrypter un mot de passe. Plus d'explications sans avoir à parcourir intégralement la doc PHP aurait été un plus. "

par pbleusea voté :
(a téléchargé ce tuto - 09 janvier 2013)

" Tuto très instructif et comme toujours simple et efficace. "

par momozizoua voté :
(a téléchargé ce tuto - 18 septembre 2012)

" merci pour le cour ça aidera dans nos developements "

par c00lera voté :
(a téléchargé ce tuto - 01 juin 2012)

" Excellent tuto tres simple et en plus gratuit que de dire de plus a part un grand merci "

par sebriliaa voté :
(a téléchargé ce tuto - 25 mars 2012)

" Très simple, clair et net "

par MoMoMafiak1
(a téléchargé ce tuto - 14 mars 2012)

" Si le formulaire renvoie sur la même page tu n'as pas besoin de mettre index.php (Enfin je crois :D ) "

par BoiteAWeb
(a téléchargé ce tuto - 12 mars 2012)

" Ok, donc c'est "un petit bout de code" "dans un coin qui traine" "quand j'avais 5mn à perdre", celà vaut-il la peine d'en faire un tuto si c'est "juste" ça ?
Je ne dénigre pas ton travail, faire une vidéo prends du temps, de plus elle est bien faite, bonne qualité, bon son, là c'est nickel.
Désolé d'être quelque peu virulent mais, quand je vois un tuto qui parle de mot de passe, cryptage et donc indeed de sécurité, je ne peux que bondir à la vue de failles ou manques d'informations.
Donc je "t'offre" ton propre code modifié car ça me fait plaisir que tu puisses à ton tour apprendre un peu de sécurité sur ton propre script, j'ai commencé aussi en faisant des failles comme tout bon débutant ^^
Quand j'invoque le support c'est que j'aimerais que, dans ton tutoriel, tu saches expliquer ce que tu utilises, pourquoi utiliser mcrypt, pourquoi rijndael, pourquoi en 256, pourquoi faire un double md5, pourquoi mettre , bref, que tu ailles un peu plus profond que juste copier du code qu'on va montonnement recopier sans le comprendre. C'est ça un tutoriel, une explication profonde.
Si tu veux juste partager un bout de code qui traine, il y a phpcs . com ou pastebin . com.
Je pense juste que le tuto n'est pas suffisament complet pour en être un (sans parler des failles, mais je peux les comprendre si tu es débutant dev php)

A bientot simpledev :) (tu as un prénom ça sera plus convivial, si tu veux discuter je suis ouvert sur skype : julio.boiteaweb) "

par simpledev
(auteur de ce tuto - 12 mars 2012)

" Hello Boiteaweb, j'ai fait ce "tuto" uniquement pour partager un bout de code que j'avais mis en place en fouillant dans la doc et en bidouillant un peu ce que j'avais pu trouver pour arriver à avoir une fonction de cryptage et une autre de decryptage. J'avais juste envie de partager ce bout de code, sans avoir la prétention d'être un expert en sécurité sinon nous ne serions pas en train d'avoir cette conversation.
-"Pardonne moi si j'ai cru que les mots "mot de passe" puis "crypter" et "php" pouvais être assimilé à un contexte de sécurité, on m'aurait menti ?"
-Tu sais très bien ce que j'ai voulu dire...
-"C'est dangeureux de marcher sur un terrain inconnu, surtout pour en faire un tuto."
-Alors oui la sécurité n'est pas mon fort, mais pourquoi "dangereux"??? Le clavier va m'exploser dans les mains?
-Pour le "on met ce qu'on veut on s'en fout" on comprend bien sur "pour l'exemple" et comme tu l'as fait remarquer on la hash
Bref dis toi que j'ai juste créer deux petites fonctions sans prétention dont j'avais besoin et que j'ai eu l'envie de partager ce petit bout de code avec d'autres que ça pouvait intéresser, à ce moment là, quand j'ai eu 5mn à perdre sans vraiment m'attarder sur les éventuelles failles sécurité que le script pouvait soulever.
Voilà je comprends pas trop ta démarche et le "tutoriel avec support inclus" en fait, tu as corrigé les failles, la sécurité a l'air d'être ton métier, je comprends pas. "

par BoiteAWeb
(a téléchargé ce tuto - 12 mars 2012)

" Hello SimpleDev
Merci de cette réponse rapide.
Ce n'est pas un tuto sécurité ? Pardonne moi si j'ai cru que les mots "mot de passe" puis "crypter" et "php" pouvais être assimilé à un contexte de sécurité, on m'aurait menti ?
Désolé de l'ironie mais ce tuto EST un tuto sécurité. Qui parlerais de mot de passe et crypto sans parler sécurité, tu prononces toi même "pour des raisons de sécurité", cqfd.
C'est dangeureux de marcher sur un terrain inconnu, surtout pour en faire un tuto.
La j'ai vraiment l'impression que tu prends cette fonction, tu copies/colles un truc dans savoir pourquoi tu mets md5(), le "on mets ce qu'on veut on s'en fout" ça fait pas très pro tout de même et encore moins crédible pour ma part.
Je vois que ce tutoriel est livré avec "support inclus", je fais appel à ton support et te demande d'expliquer/répondre à mes interrogations postées précédemment :]
A bientot ! "

par simpledev
(auteur de ce tuto - 12 mars 2012)

" Bonjour @ BoiteAWeb, merci pour ton commentaire qui servira surement à quelques uns, mais comme tu l'as surement remarqué, il ne s'agissait pas vraiment d'un tuto sur la sécurité, je montre juste en 5mn chrono comment on peut crypter et décrypter une chaîne, ensuite si les gens veulent s'en servir dans leurs développements ils créeront eux même les fonctions dont ils ont besoin, je voyais pas l'intérêt de le montrer dans le tuto, de plus comme tu le dis on utilise plutôt des fonctions de hashage en général. Après pour la balise pas fermée tu pousses un peu là, c'est pas un tuto sur comment faire un document html, de même pour le index.php qui est un fichier et pas un dossier, tout le monde le sait et tout le monde a compris ce que je voulais dire... Bon sinon merci pour tes lumières en sécurité notamment la correction des failles, ça sera toujours utile et ça évitera peut-être à certains des petits soucis de hacking^^
A+ "

par BoiteAWeb
(a téléchargé ce tuto - 12 mars 2012)

" Bonjour,
Je me permet de réagir sur certains points de la vidéo, je suis ultra déçu, je m'attendais à du bon niveau pour parler cryptologie ...
Déjà c'est dommage que le script contienne 3 failles web :

1- Il est possible d'afficher une "Notice" qui donne le chemin complet du serveur, cette faille est appelée "Full Path Disclosure", une information très utile pour un hacker,
=> Modifiez avec firebug le nom du champ 'pass' en autre chose, comme 'passss', entrer un code et validez.
==> Ceci écrira sur la page "Notice: Undefined index in /home/www/machin/index.php"
===> Le script vérifie que $_POST n'est pas vide mais ne vérifie pas si l'index 'pass' est présent et rempli.

2- Un peu plus grave : le script montre aussi comment créer une faille XSS sans s'en rendre compte.
Pour tester la faille, il faut avoir les REGISTER_GLOBALS sur ON et faire ceci :
=> Allez sur cette url (inoffensive, promis)
/index.php?pass=1&encrypted;=Bonjour XSS&decrypted;=<p>&lt;input placeholder=login&gt;</p>alert&#40;String.fromCharCode(77,101,114,99,105,32,100,101,32,118,111,117,115,32,114,101,99,111,110,110,101,99,116,101,114&#41;);
==> Ceci va écrire dans la page "Bonjour XSS" et ajouter un champ "login" et une popup javacript indiquant "Merci de vous reconnecter".
===> Le script n'initialise pas les variables et assume qu'elle le sont avant de les écrire dans la page. Il faut toujours initialiser les variables !

3- Essaie ton script en mettant "alert&#40;123&#41;;" et là aussi il a y a faille XSS, il manque une sanitization (francisation de "désinfection") des données avec htmlentities( $variable, ENT_QUOTES );

Puis :

4- Je suis déçu justement que ta $key soit si peu documentée, tu dis "vous mettez n'importe quoi on s'en fout", wow, "on s'en fout" o_O oui enfin, ça serait sympa de dire à quoi elle va servir.
Ta clé est-elle symétrique ? asymétrique ? Est-elle privée ? secrète ? publique ? La protection apportée par un algorithme de chiffrement est liée à la longueur de la clé. En fait, la longueur de la clé quantifie le nombre maximal d'opérations nécessaires au déchiffrement. C'est donc une borne supérieure sur la sécurité du système. Dommage de ne pas en dire un peut plus tout de même, on dirait que cette clé est prise à la légère. Heureusement que le md5 allonge la taille de clé, mais ça aurait été bien de savoir pourquoi on fait un md5 ici, ce n'est pas forcément utile si la clé est assez longue et correcte.

5- Pourquoi utiliser mcrypt_encrypt ? Pourquoi utiliser MCRYPT_RIJNDAEL_256 (MCRYPT pas MYCRYPT, sais tu de quoi tu parles ?) ? Qui sont Joan Daemen et Vincent Rijmen ? Pourquoi utiliser MCRYPT_MODE_CBC et pas EBC ? C'est un tutoriel non ? Là j'ai juste l'impression de copier/coller ce que tu donnes, je n'apprends rien.
Pour info, MCRYPT_RIJNDAEL_256 et 192 ne correspondent pas aux critères légaux de l'AES, 128 oui.

6- Tu passes le fichier en UTF-8 en 1 seconde, tu peux expliquer pourquoi tu le passes en UTF-8 ? Là tu dis "pour que ça s'affiche correctement" oui ok, mais pourquoi autre chose ferait que ça s'affiche mal ? Explique ! Tu es en train de faire un tuto !

7- Pourquoi mettre md5(md5()) pour la 'iv' (sais tu ce que signifie iv ?) ? Ca serait bien aussi de comprendre, explique pourquoi tu ne mets pas un "time()" ou "rand()" ou une autre clé.

8- Ici tu cryptes et décryptes dans la foulée, mais sur un site/dans un vrai script on ne fais jamais ça, tu peux donc te retrouver avec du code qui fonctionne dans ton exemple et pas ailleurs.
Mieux vaut utiliser des fonctions séparée et réutilisables en plus.

9- le '' tu dis juste "ça c'est pour les caractères vides", c'est tout ? Ok, c'est pas un tutoriel sur le NULL BYTE, mais il manque alors le  aussi (EOT) qui peut être envoyé lors d'un décryptage sous ColdFusion.

A- J'oubliais, autre chose : Tu dis "vous cryptez son mot de passe en base de données par mesure de sécurité" mais ce n'est pas sécurisé de crypter un mot de passe.
=> En fait, il ne faut pas créer de script capable de crypter/décrypter un mot de passe, jamais. Un mot de passe ça se hash (md5, sha256 etc), le but est que ça ne soit PAS réversible, sinon un piratage sera possible.
=> Quand on veut renvoyer un pass à un membre, on lui recrée un mot de passe aléatoire et on lui renvoie. Inutile de décrypter donc ! On lui mets de pass aléatoire hashé en BDD.
=> Quand on veut tester la validité du mot de pass, on test les hash ;)
Exemple de mot de pass hashé simplement : md5( md5( $key . $pass ) . $key );
Remarquez, n'utilisez pas "md5" seul pour hashé un pass, le hash est trop faible. De plus, gardez votre $key bien secrète, sinon, aucun hash ne va résister ;)

B- Quelques détail :
* Le verbe "encrypter" n'existe pas en français, on dit "crypter" même si en anglais c'est "encrypt" ;)
* "index.php" est un fichier, pas un dossier.
* l'action par défaut d'un formulaire est la page courante, inutile de réécrire l'action donc.
* Il y a 2 &lt;head&gt;
* Manque un </p> après le submit.

C- C'est fou que les autres commentateurs ne se posent aucune question, juste "super" "5/5" oui enfin c'est un tutoriel, vous avez appris quoi là ? Vous savez copier/coller son code mais savez vous le réutiliser ? le modifier ? modifier quoi ? l'avez vous compris ? pourquoi ce choix de cryptage ? pourquoi crypter ? bref, trop trop trop léger.

D- Bon point, tu indiques bien que ce n'est pas habituel de renvoyer son propre mot de passe en clair, c'est vrai que ça arrive de voir un pass revenir en clair, perso, je déteste ça ...

Voici le code de ce tuto corrigé :
&lt;?php
$encrypted = $decrypted = ''; // initialisation des variables
if( isset( $_POST['en_pass'], $_POST['encrypt'] ) ) // si on a demandé un cryptage de text
{
$encrypted = my_encrypt( $_POST['en_pass'] ); // appel de notre fonction de cryptage
}else
if( isset( $_POST['de_pass'], $_POST['decrypt'] ) ) // sinon on a demandé un décryptage de pass
{
$decrypted = htmlentities( my_decrypt( $_POST['de_pass'] ), ENT_QUOTES ); // appel de notre fonction de décryptage avec sanitization (pas de filtre !) des données en sortie
}

// ici, les variables $encrypted & $decrypted valent forcément quelquechose, la faille XSS est bouchée, même en REGISTER_GLOBALS à ON.
// De plus, aucune notice car les index sont vérifiés

function my_encrypt( $text, $key = 'ceci est ma longue clé de cryptage' ) // on passe une clé par défaut si aucune n'est ajoutée lors de son appel
{
return base64_encode( mcrypt_encrypt( MCRYPT_RIJNDAEL_256, md5( $key ), $text, MCRYPT_MODE_CBC, md5( md5( $key ) ) ) ); // je garde la fonction du tuto
}

function my_decrypt( $pass, $key = 'ceci est ma longue clé de cryptage' ) // idem que dessus
{
return rtrim( mcrypt_decrypt( MCRYPT_RIJNDAEL_256, md5( $key ), base64_decode( $pass ), MCRYPT_MODE_CBC, md5( md5( $key ) ) ), '' ); // idem +  pour EOT
}

?&gt;
<!DOCTYPE html>
&lt;html lang="fr"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;title&gt;
&lt;?php // un beau titre ;p
if(!empty($encrypted)):?&gt;
Demande de cryptage
&lt;?php elseif(!empty($decrypted)):?&gt;
Demande de décryptage
&lt;?php else:?&gt;
En attente ...
&lt;?php endif;?&gt;
&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;?php if(!empty($encrypted)): // demande de cryptage on passe ici?&gt;
<p>Le mot de passe crypté : <pre>&lt;?php echo $encrypted;?&gt;</pre></p>
&lt;?php elseif(!empty($decrypted)): // sinon on pass ici?&gt;
<p>Le mot de passe décrypté : <pre>&lt;?php echo $decrypted;?&gt;</pre></p>
&lt;?php endif; // sinon rien ?&gt;
&lt;form method="post"&gt;

<p>Crypter un mot de passe:</p>
&lt;input type="password" name="en_pass"&gt;
<p>&lt;input type="submit" name="encrypt" value="Crypter"&gt;</p>

<p>Décrypter un mot de passe:</p>
&lt;input type="text" name="de_pass"&gt;
<p>&lt;input type="submit" name="decrypt" value="Décrypter"&gt;</p>

&lt;/form&gt;

&lt;/body&gt;
&lt;/html&gt;

Voilà, bonne journée, bon codage, bon apprentissage du PHP et la sécurité ;) "

par wordup258a voté :
(a téléchargé ce tuto - 24 décembre 2011)

" Parfait "

par FFSEVEN59a voté :
(a téléchargé ce tuto - 19 décembre 2011)

" tres bon "

par aziz1235a voté :
(a téléchargé ce tuto - 16 décembre 2011)

" 5/5 "

par christamosa voté :
(a téléchargé ce tuto - 10 décembre 2011)

" Simple et efficace "

par oditraa voté :
(a téléchargé ce tuto - 29 novembre 2011)

" 5 "

par Olivier75009a voté :
(a téléchargé ce tuto - 29 novembre 2011)

" Simpledev, comme à son habitude : simple et efficace !

Y'a vraiment du bon dans ton travail ! "

 

Donnez votre avis ou posez une question au formateur.

Vous souhaitez commenter ce tuto vidéo ? Créez un compte gratuit. Déjà membre ? Identifiez-vous

Ce tuto en résumé ...

Ce tuto Php 5.3 d’une durée de 7 minutes a été téléchargé 865 fois et a reçu une note moyenne de 5/5.

Ce tuto a été publié le 28 novembre 2011 par simpledev, formateur certifié par Tuto.com, ayant reçu une note moyenne de 4,4/5 pour l’ensemble de ses vidéos, dans la catégorie Tuto Php Sécurité.

Tous les fichiers sources sont fournis avec cette formation. Ces derniers vous permettront de reproduire les manipulations expliquées dans cette formation.

Ce tuto video vous expliquera étape par étape, toutes les manipulations présentées par le formateur.

Toutes nos vidéos sont visionnées par notre équipe, avant d’être mises en ligne, garantissant ainsi la qualité des produits téléchargés.

N'hésitez pas à nous contacter si vous avez la moindre question !