La réponse aux questions les plus courantes sur bcrypt ?
Oui, aujourd'hui est l'algorithme le plus simple à utiliser et un des plus sur. Scrypt est réputé encore plus résistant aux attaques, mais il est difficile de l'utiliser dans les languages de programmation courant (Java, C#, .Net, PHP, etc.).
Basiquement, l'algorithme fonctionne ainsi : Générer un grain de sel aléatoire. Un facteur coût a été préconfiguré (10 par défault en PHP). Générer le hash.
Le hash est la concétanation du cout, du grain de sel et du mot de passe "encodé". Quand quelqu'un essaye de se connecter, on récupére son mot de passe hashé pour savoir le grain de sel et le cout utilisé, et on génère un hash de la même manière. Si le hash est identique, le mot de passe est bon.
Un hash bcrypt ressemble à cela :
$2y$10$0IexiTnFtZ6BeARkfVvidemnnAuPydkcH2tEpVbnE60o97K3UZn26
Vous pouvez distinguer trois champs, délémité par des "$" :
L'objectif est simple : prévenir des accès frauduleux aux comptes de vos utilisateurs en cas de faille de sécurité. Le but est donc simple : que cela soit le plus couteux (en temps et/ou en argent) pour un hacker to décoder les mots de passe. Une autre raison d'utiliser un système robuste et de vous donner le temps de patcher votre système, réinitialiser tous les mots de passe, et demandez à vos utilisateurs de le faire aussi, en cas d'intrusion.
L'entropie ! En clair, c'est le nombre de variation possible pour un mot de passe d'une taille donnée. Un mot de passe de 6 caractères minuscules, c'est 26^6 = 308 millions de possibilité. Un mot de passe de 10 caractères, dont des majuscules, chiffres, caractères spéciaux, c'est 96^10 = 66 milliars de milliars de possibilité. Simplement 216 milliars plus long à déchiffer... Pour résumer, un mot de passe comme "tINtiN1" est bien plus simple à deviner pour une machine que "merciHerged'avoircrééTintin!". Pensez-y pour vos prochains mot de passe !
$text = 'mon mot de passe'; $text_hashed = password_hash($text, PASSWORD_BCRYPT)
var bcrypt = require('bcrypt'); bcrypt.genSalt(10, function(err, salt) { bcrypt.hash("mon mot de passe", salt, function(err, hash) { // Store hash in your password DB. }); }); bcrypt.compare("un autre mot de passe", hash, function(err, res) { // res == false });
Vous pouvez utiliser la librairie jBCrypt.
// Hacher un mot de passe String hashed = BCrypt.hashpw(password, BCrypt.gensalt()); // Tester si un mot de passe est identique à un autre if (BCrypt.checkpw(candidate, hashed)) System.out.println("It matches"); else System.out.println("It does not match");
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; public class PasswordEncoderGenerator { public static void main(String[] args) { String password = "mon mot de passe"; BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); String hashedPassword = passwordEncoder.encode(password); System.out.println(hashedPassword); } }
import bcrypt import random password = "mon mot de passe" print bcrypt.hashpw(password,bcrypt.gensalt())