Encodage, hachage, chiffrement : trois choses différentes
Distinguer Base64, hash et chiffrement.
Objectifs
À la fin de cette leçon, vous saurez :
- distinguer sans hésiter Base64, fonction de hash et chiffrement ;
- expliquer pourquoi un mot de passe se hache et ne se chiffre jamais (en principe) ;
- reconnaître chaque technique à son usage.
Trois questions, trois outils
| Question | Outil | Réversible ? |
|---|---|---|
| « Comment transporter des données binaires dans du texte ? » | encodage (Base64) | oui, sans clé |
| « Comment vérifier qu'une donnée est identique sans la stocker ? » | hash (SHA-256) | non |
| « Comment rendre une donnée lisible seulement par son destinataire ? » | chiffrement (AES…) | oui, avec la clé |
L'encodage : changer d'emballage
Buffer.from("bonjour").toString("base64"); // "Ym9uam91cg=="
Ym9uam91cg== n'est pas secret : n'importe qui décode en une ligne. Base64 sert au transport (pièces jointes mail, data-URI), jamais à la protection. Erreur classique de débutant : croire avoir « chiffré » parce que c'est illisible.
Le hash : une empreinte à sens unique
const { createHash } = require("node:crypto");
createHash("sha256").update("mot-de-passe").digest("hex");
// "e38ad214943daad1d64c102faec29de4afe9da3d..." (toujours la même)
Propriétés attendues :
- déterministe : même entrée → même empreinte ;
- à sens unique : de l'empreinte, impossible de remonter à l'entrée ;
- sensible au moindre bit : changer une lettre change tout.
Usage : vérifier une égalité sans stocker la donnée. Cas emblématique — les mots de passe : on stocke hash(mot de passe), et à la connexion on compare les empreintes. Même volée, la base ne révèle pas les mots de passe (en pratique on ajoute un sel et un algorithme lent dédié comme bcrypt — chapitre authentification).
Le chiffrement : un coffre réversible avec clé
// schéma conceptuel
chiffré = AES(données, cléSecrète);
données = AES_déchiffre(chiffré, cléSecrète); // possible AVEC la clé
Sans la clé, les données sont inutilisables ; avec elle, elles reviennent intactes. Usage : protéger une donnée qui devra être relue (numéro de carte chez un prestataire, contenu de fichiers sensibles).
Le tableau de décision
Besoin de RELIRE plus tard avec autorisation ? → chiffrement
Besoin de VÉRIFIER une égalité ? → hash
Besoin de TRANSPORTER en texte sûr ? → encodage
Exercice
Classez chaque besoin : encodage, hash ou chiffrement ?
- Stocker en base les mots de passe des utilisateurs.
- Inclure une petite image directement dans un fichier HTML.
- Protéger un fichier d'archive que l'équipe devra rouvrir plus tard.
- Vérifier l'intégrité d'un fichier téléchargé (le site publie une empreinte).
Résumé
- Base64 = emballage visible ; hash = empreinte irréversible ; chiffrement = coffre réversible par clé.
- Mot de passe → hash (+ sel + algorithme lent). Jamais Base64. Jamais chiffrement simple.
Correction disponibleCherchez d’abord par vous-même.Voir la correction
Correction
Réponses détaillées
1. Hash (avec sel et algorithme lent type bcrypt/argon2). On n'a jamais besoin de relire un mot de passe, seulement de vérifier celui saisi à la connexion.
2. Encodage Base64 (data-URI) : aucun secret à protéger, juste un transport binaire→texte.
3. Chiffrement : la relecture est nécessaire, donc il faut la possibilité de déchiffrer — avec gestion sérieuse des clés.
4. Hash : le site publie SHA-256 du fichier ; vous recalculez localement et comparez. Toute altération, même d'un octet, rend les empreintes différentes.