Tutoriel Crypter le mot de passe de sa base de donnée en PHP

Paul GTP

Légende vivante
VIP
Inscription
15 Août 2013
Messages
6 194
Réactions
7 545
Points
24 772
RGCoins
0
466fff010c72413890872e1200dfb349.png


Salut à tous :p
Je vais vous montrer aujourd'hui une petite astuce pour pouvoir crypter votre mot de passe.
Ne quittez pas la page tout de suite, il ne s'agit pas d'un tutoriel basique sur du sha1 ou du md5 !

Ici, le but va être de crypter le mot de passe sur une page de connexion à la bdd.
Par exemple, dans mon cas, voici le contenu de ma page bdd.php

10aca1238ed44704a1aebd7c27603e7e.png


Bon, vous pouvez ici observer deux choses:
On peut voir dans un premier temps que j'inclus un fichier cryptage.php.
Puis dans un deuxième temps, on peut observer que le mot de passe se sert de Cryptage().

Pourquoi faire tout ce charabia pour des informations que personne n'ira consulté ?
Et bien il peut vous arriver d'avoir à modifier/rajouter du contenu sur cette page, non ?
Ou alors il peut arriver de devoir travailler dessus dans un lieu publique (cyber café, cdi, etc).

Avec cette petite sécurité en plus, personne n'ira retenir votre mot de passe, il est invisible !

Et pourquoi ne pas simplement stocker la variable mot de passe dans une autre page ?
Car si la personne ouvre l'autre page, il lui faudra moins d'une seconde pour récupérer votre mot de passe !

Bon, je vous l'accorde, cette méthode n'est pas la plus nécessaire du monde, mais elle m'a bien dépanné.
Je vous la partage donc aujourd'hui même si elle vous servira très peu !

4fc4e31d4b3445ac98bd1006d069fd97.png


La fonction Cryptage()

Cette fonction a été proposée dans un tutoriel sur le célèbre OpenClassrooms.
L'auteur de ce tutoriel est The maaaaan, vous irez donc le remercier personellement :trollface:
Vous allez devoir créer un fichier où stocker le script de cryptage.

Voici le code dont vous aurez besoin dans ce fichier que j'appelle cryptage.php:

Code:
<?php
// Script par The maaaaan du SDZ
$Clef = "VOTRE CLEF";
$MDP = "VOTRE MDP";
function Cryptage($MDP, $Clef) {
    $LClef = strlen($Clef);
    $LMDP = strlen($MDP);

    if ($LClef < $LMDP) {
        $Clef = str_pad($Clef, $LMDP, $Clef, STR_PAD_RIGHT);
    } elseif ($LClef > $LMDP) {
        $diff = $LClef - $LMDP;
        $_Clef = sub str($Clef, 0, -$diff);
    }

    return $MDP ^ $Clef;
}

echo $Crypt;
?>
(vous pouvez retirer le copyright, c'est moi qui l'ai rajouté car je suis gentil :blush:)

ATTENTION: Vous devez retirer l'espace entre sub et str dans sub str($Clef, 0, -$diff);
Je ne peux pas le faire à cause d'un bug sur le forum mais vous DEVEZ le faire!


Ce code fonctionne sur le principe de la méthode Vernam.
Pour en savoir plus sur cette méthode Vernam, vous pouvez en savoir plus ici:


4fc4e31d4b3445ac98bd1006d069fd97.png


Mode de fonctionnement

Voici un cas de fonctionnement du code:

Code:
$MDP = "Site du Zero";
$Clef = "Mateo";
$Crypt = Cryptage($MDP, $Clef);
$Decrypt = Cryptage($Crypt, $Clef);

$Crypt sert à crypter Site du Zero avec la clef Mateo
Site du Zero crypté, par exemple, renvoie cette valeur:

4b7cd01eb2be4c9d987433cee9b0daa4.png


$Decrypt contient le mot de passe précédent décrypté (Site du Zero).

Vous devez donc définir une clef et un mot de passe pour pouvoir utiliser cette méthode.
Le mot de passe est celui que vous insérerez dans votre base de donnée.
La clef, vous devez la définir. Cela peut-être tout ce que vous voulez.
Exemple de clefs: ff8oaai8U3 ; kangourou ; twuxytupu, etc

4fc4e31d4b3445ac98bd1006d069fd97.png


Mise en place

Voici le contenu de votre fichier de connexion que j'appelle bdd.php:

Code:
include('cryptage.php');

    $host = "sql31.free-h.org";
    $database = "pauldb";
    $user = "paulsinnah";
    $password = Cryptage($Crypt, $clef);

    try {
        $bdd = new PDO('mysql:host='.$host.';dbname='.$database.';charset=utf8', ''.$user.'', ''.$password.'');
    }

    catch (Exception $e) {
        die('Erreur : ' . $e->getMessage());
    }

Il vous suffit de ce simple code pour faire fonctionner le script ! ;)

Pour une sécurité supplémentaire, je vous conseille une petite astuce:
Cryptez votre mot de passe, récupérez la valeur avec un echo, et copiez/collez la version cryptée directement.
Quoi ? Vous n'avez rien compris ? D:

Bon, voici un code qui va vous permettre de faire ça :p

Code:
<?php
$Clef = "VOTRE CLEF";
$MDP = "VOTRE MDP";
function Cryptage($MDP, $Clef) {
    $LClef = strlen($Clef);
    $LMDP = strlen($MDP);

    if ($LClef < $LMDP) {
        $Clef = str_pad($Clef, $LMDP, $Clef, STR_PAD_RIGHT);
    } elseif ($LClef > $LMDP) {
        $diff = $LClef - $LMDP;
        $_Clef = sub str($Clef, 0, -$diff);
    }

    return $MDP ^ $Clef;
}

echo $Crypt;
?>

ATTENTION: Vous devez retirer l'espace entre sub et str dans sub str($Clef, 0, -$diff);
Je ne peux pas le faire à cause d'un bug sur le forum mais vous DEVEZ le faire!

Lancez la page, faites un copier/coller du contenu.
Recopiez votre mot de passe dans ce code à la place de MOT DE PASSE dans le code:

Code:
<?php
    include('cryptage.php');

    $host = "sql31.free-h.org";
    $database = "pauldb";
    $user = "paulsinnah";
    $password = Cryptage('MOT DE PASSE', $clef);

    try {
        $bdd = new PDO('mysql:host='.$host.';dbname='.$database.';charset=utf8', ''.$user.'', ''.$password.'');
    }

    catch (Exception $e) {
        die('Erreur : ' . $e->getMessage());
    }
?>

4fc4e31d4b3445ac98bd1006d069fd97.png


Voilà ! Ce petit tutoriel touche à sa fin ;)
Si vous avez des problèmes/questions, n'hésitez pas à poster un commentaire ;)
À bientôt :bye:
 

KyloRen'

Premium
Inscription
28 Décembre 2014
Messages
1 112
Réactions
1 525
Points
6 758
RGCoins
0
Très bonne mise en page, très bon topic !
Merci de ton topic, sa servira :ok:
 

KMZ78

Premium
Inscription
20 Juillet 2012
Messages
340
Réactions
62
Points
11 406
RGCoins
0
Salut juste pour dire crypter n'existe pas mais c'est chiffre plutôt :)
 

Maxence ES

Guizou
Premium
Inscription
23 Janvier 2013
Messages
4 842
Réactions
3 146
Points
17 331
RGCoins
0
Pas con du tout, pour récupérer un mot de passe, là où md5, sha1 et autres techniques de cryptage ne peuvent pas revenir en arrière. ;)
Merci :)
 

Paul GTP

Légende vivante
VIP
Inscription
15 Août 2013
Messages
6 194
Réactions
7 545
Points
24 772
RGCoins
0
ça mérite la notice ça
Ahah :p
Très bonne mise en page, très bon topic !
Merci de ton topic, sa servira :ok:
Merci :D
Salut juste pour dire crypter n'existe pas mais c'est chiffre plutôt :)
Oui je sais, mais la majorité des gens sont familiers à cette expression :rêve:
Pas *** du tout, pour récupérer un mot de passe, là où md5, sha1 et autres techniques de cryptage ne peuvent pas revenir en arrière. ;)
Merci :)
Oui effectivement ahah :p
 

Insomniaque97

Premium
Inscription
21 Juillet 2015
Messages
1 097
Réactions
516
Points
12 585
RGCoins
0
Un peu long à mettre en place ( j'ai l'impression ) mais ça vaut largement le coup !
 

AstateGfx

Premium
Inscription
27 Janvier 2013
Messages
3 158
Réactions
176
Points
17 571
RGCoins
0
a la place d'include vaut mieux utiliser require_once , pour eviter une Lfi ;)
 
Haut