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

Maxence ES

Guizou
Premium
Inscription
23 Janvier 2013
Messages
4 842
Réactions
3 146
Points
17 331
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
ç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
 
Haut