420-5D3 – Notion de Hashage

28 septembre 2023

Introduction au Hashage

Le hashage est un processus de conversion d’une donnée (généralement une chaîne de caractères) en une valeur de longueur fixe, généralement sous forme de nombre hexadécimal. Cette valeur de hachage est unique pour une entrée donnée, ce qui permet d’identifier rapidement des données, de vérifier l’intégrité des données et de stocker des mots de passe de manière sécurisée.

Pourquoi Utiliser le Hashage ?

  1. Sécurité des mots de passe : Le hashage est couramment utilisé pour stocker les mots de passe de manière sécurisée. Au lieu de stocker les mots de passe en texte brut, les systèmes stockent leur valeur de hachage, ce qui rend difficile leur récupération par des tiers en cas de violation de données.
  2. Vérification de l’intégrité : Le hashage permet de vérifier si les données ont été altérées. Si la valeur de hachage calculée à partir des données originales correspond à la valeur de hachage stockée, les données sont intactes.
  3. Stockage efficace : Les valeurs de hachage sont de longueur fixe, ce qui permet un stockage efficace dans les bases de données et la gestion rapide des données.

Utilisation du Hashage en PHP

En PHP, vous pouvez utiliser la fonction hash() pour calculer des valeurs de hachage en utilisant divers algorithmes de hachage tels que MD5, SHA-1, SHA-256, etc.

Exemple 1 : Calcul d’un Hash MD5

phpCopy code

$data = "Ceci est une chaîne de données à hacher.";
$hash = hash('md5', $data);
echo "MD5 Hash : $hash";

Résultat :

MD5 Hash : 5d41402abc4b2a76b9719d911017c592


Exemple 2 : Calcul d’un Hash SHA-256

$data = "Ceci est une autre chaîne de données à hacher.";
$hash = hash('sha256', $data);
echo "SHA-256 Hash : $hash";

Résultat :

SHA-256 Hash : 322501f48c8a849c6be7e5a37c3a49c5206de1f3b64c4ee7f348bca59b6cd7ce


Exemple 3 : Utilisation de Sel (Salt) pour le Hashage

$password = "MotDePasseSecret";
$salt = bin2hex(random_bytes(16)); // Génère un sel de 16 octets
$hashed_password = hash('sha256', $salt . $password);
echo "Mot de passe haché avec sel : $hashed_password";

Résultat (le résultat variera car le sel est généré aléatoirement) :

Mot de passe haché avec sel : 4a65d4ff2c852a58c93ef18e42b6eef010a3b28a47b3ff7d88bf647f7a1934f5


Exemple 4 : Vérification d’un Mot de Passe

Résultat (dépend de la correspondance ou de la non-correspondance des hachages) :Copy code

$stored_hashed_password = "HashStockeIci";
$user_input_password = "MotDePasseSecret";

// Recalcule le hachage
$hashed_input_password = hash('sha256', $salt . $user_input_password);

// Compare les hachages
if ($hashed_input_password === $stored_hashed_password) {
    echo "Mot de passe correct.";
} else {
    echo "Mot de passe incorrect.";
}

Mot de passe correct.

Assurez-vous de stocker les hachages de mots de passe de manière sécurisée et de suivre les meilleures pratiques de sécurité lors de la gestion des mots de passe dans vos applications PHP.


Stocker les hash dans Oracle

Pour stocker le hachage de mots de passe dans une base de données Oracle à l’aide de PHP, vous pouvez utiliser la bibliothèque Oracle Database (OCI8). Voici un exemple de code qui illustre comment insérer un hachage de mot de passe dans une base de données Oracle :

<?php
// Informations de connexion à la base de données Oracle
$host = 'localhost'; // Adresse du serveur Oracle
$port = '1521'; // Port du serveur Oracle
$service_name = 'ORCL'; // Nom du service Oracle
$username = 'votre_utilisateur'; // Nom d'utilisateur Oracle
$password = 'votre_mot_de_passe'; // Mot de passe Oracle

// Connexion à la base de données Oracle
$conn = oci_connect($username, $password, "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=$host)(PORT=$port))(CONNECT_DATA=(SERVICE_NAME=$service_name)))");

if (!$conn) {
    $e = oci_error();
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

// Données à insérer
$username = 'utilisateur123';
$hashed_password = 'le_hachage_du_mot_de_passe'; // Assurez-vous d'avoir haché le mot de passe auparavant

// Requête d'insertion
$query = "INSERT INTO utilisateurs (nom_utilisateur, mot_de_passe_hash) VALUES (:nom_utilisateur, :mot_de_passe_hash)";

// Préparation de la requête
$stid = oci_parse($conn, $query);

// Liaison des paramètres
oci_bind_by_name($stid, ':nom_utilisateur', $username);
oci_bind_by_name($stid, ':mot_de_passe_hash', $hashed_password);

// Exécution de la requête
if (oci_execute($stid)) {
    echo "Mots de passe hachés insérés avec succès dans la base de données Oracle.";
} else {
    $error = oci_error($stid);
    echo "Erreur lors de l'insertion des mots de passe hachés : " . $error['message'];
}

// Fermeture de la connexion
oci_free_statement($stid);
oci_close($conn);
?>

Assurez-vous d’adapter les informations de connexion à votre configuration Oracle. Dans cet exemple, nous nous connectons à la base de données Oracle, préparons une requête d’insertion, lions les paramètres et exécutons la requête pour insérer le hachage du mot de passe dans une table de la base de données Oracle.


Conclusion

Le hashage est une technique fondamentale pour sécuriser les données, notamment les mots de passe, dans les applications PHP. En utilisant les fonctions de hachage de PHP et en suivant les meilleures pratiques, vous pouvez garantir la sécurité des données sensibles et protéger vos utilisateurs contre les violations de données. 😉