Cet article présente principalement la méthode d'utilisation de bcryptjs pour le cryptage des mots de passe sous Express. Maintenant, je le partage avec vous et le donne comme référence.
Il y a quelques jours, j'ai développé un petit projet utilisant Express. Lors du développement du module de connexion et d'enregistrement, bcryptjs a été utilisé pour le cryptage des mots de passe :
bcrypt est un cross-. outil de cryptage de fichiers de plate-forme. Les fichiers cryptés par celui-ci peuvent être transférés sur tous les systèmes d'exploitation et processeurs pris en charge. Son mot de passe doit être compris entre 8 et 56 caractères et sera converti en interne en clé de 448 bits.
En plus de chiffrer vos données, bcrypt écrasera par défaut le fichier d'entrée d'origine trois fois avec des données aléatoires avant de le supprimer, pour contrecarrer les tentatives de récupération par quelqu'un qui pourrait accéder aux données de votre ordinateur. Si vous ne souhaitez pas utiliser cette fonctionnalité, vous pouvez la désactiver.
bcrypt utilise l'algorithme de cryptage Blowfish publié par Bruce Schnell en 1993. Plus précisément, bcrypt est implémenté à l'aide de l'algorithme de Paul Kircher. Le code source distribué avec bcrypt est légèrement modifié par rapport à la version originale.
Étapes d'utilisation de bcryptjs sous Express :
1 Installez le module bcryptjs
npm install bcryptjs --save
2. Introduisez la bibliothèque bcryptjs dans le module qui. nécessite un cryptage
var bcrypt = require('bcryptjs');
3. Définissez la force de cryptage
var salt = bcrypt.genSaltSync(10);
4. Générez la valeur HASH lors de l'enregistrement et insérez-la dans la base de données
router.post('/register', function(req, res, next){ // 从连接池获取连接 pool.getConnection(function(err, connection) { // 获取前台页面传过来的参数 var param = req.query || req.params; /*生成HASH值*/ var hash = bcrypt.hashSync(param.pwd,salt); // 建立连接 新增用户 connection.query(userSQL.insert, ["",hash,param.phone,"","","",0], function(err, result) { res.send(result); // 释放连接 connection.release(); }); }); });
5. lors de la connexion et insérez-le dans la base de données
router.post('/login', function(req, res, next){ // 从连接池获取连接 pool.getConnection(function(err, connection) { // 获取前台页面传过来的参数 var param = req.query || req.params; // 建立连接 根据手机号查找密码 connection.query(userSQL.getPwdByPhoneNumber, [param.phone], function(err, result) { if(bcrypt.compareSync(param.pwd,result[0].password)){ res.send("1"); connection.query(userSQL.updateLoginStatusById, [1,result[0].id], function(err, result) { }); }else{ res.send("0"); } // 释放连接 connection.release(); }); }); });
Ce qui précède utilise l'utilisation synchrone de bcryptjs. L'utilisation asynchrone est présentée ci-dessous :
Générer un mot de passe de hachage :
bcrypt.genSalt(10, function(err, salt) { bcrypt.hash("B4c0/\/", salt, function(err, hash) { // Store hash in your password DB. }); });
Vérification du mot de passe :
bcrypt.compare("B4c0/\/", hash).then((res) => { // res === true });
Ce qui suit est un exemple simple d'utilisation de Bcrypt pour crypter des données :
var mongoose = require('mongoose'); // 引入bcrypt模块 var bcrypt = require('bcrypt'); // 定义加密密码计算强度 var SALT_WORK_FACTOR = 10; // 连接数据库 mongoose.connect('mongodb://localhost:27017/test') // 定义用户模式 var UserSchema = new mongoose.Schema({ name: { unique: true, type: String }, password: { unique: true, type: String } },{ collection: "user"}); // 使用pre中间件在用户信息存储前进行密码加密 UserSchema.pre('save', function(next){ var user = this; // 进行加密(加盐) bcrypt.genSalt(SALT_WORK_FACTOR, function(err, salt){ if(err){ return next(err); } bcrypt.hash(user.password, salt, function(err, hash){ if(err){ return next(err); } user.password = hash; next(); }) }); }); // 编译模型 var UserBox = mongoose.model('UserBox', UserSchema); // 创建文档对象实例 var user = new UserBox ({ name : "Jack" , password : "123456" }); // 保存用户信息 user.save(function(err, user){ if(err){ console.log(err); }else{ // 如果保存成功,打印用户密码 console.log("password: " + user.password); } })
Ce qui précède est ce que j'ai compilé pour tout le monde, j'espère que ce sera le cas. être utile à tout le monde à l’avenir.
Articles connexes :
Classe de cache encapsulée implémentée via Redis en tant que cache dans nodejs
Utilisation de JavaScript natif pour obtenir l'effet de loupe
Analyse détaillée du code source de Vue Socket.io
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!