今天才知道密鑰yuè的正確讀音,我一個語言學碩士栽在這上面25年,⊙﹏⊙b汗, 寫文章的時候輸入法提醒我知道我讀錯了。算法
首先引入 bcrypt 插件npm
cnpm i bcrypt --save
複製代碼
bcrypt.genSalt, bcrypt.hash 都是異步執行, 因此要在裏面進行對secret賦值操做。安全
要使用 bcrypt.genSaltSync(rounds)
bcrypt.hashSync(data, salt)
用法和同步都是同樣的, 只不過異步方法沒有回調函數參數, 是返回布爾值bash
const bcrypt = require('bcrypt');
let password = 'hello world' //待加密的明文密碼
let saltRounds = 10; //saltRounds: 正數,表明hash雜湊次數,數值越高越安全,默認10次。
// bcrypt是單向Hash加密算法 不能反向破解
var secret; 這個將會是加密後的密碼,稍後用來比對
//bcrypt.genSalt是異步執行
bcrypt.genSalt(saltRounds, (err, salt) => {
//salt 是一串加密字符串, 128bits隨機字符串,22字符, 會成爲hash密碼前面的一段
// console.log({ salt: salt })
//bcrypt.hash 是異步執行
bcrypt.hash(password, salt, function (err, hash) {
if (err) throw err;
console.log(hash)
secret = hash;
// 通過明文密碼password和salt進行hash進行saltRounds次循環hash10次,獲得的密碼
// 輸出結果, 由於是數字加密,因此每次都是不同的 , 後續要使用bcrypt.compare進行比較:
// 好比 :{ salt: '$2b$10$KnabCCverzpNFeHIbYgo4u' }
// {hash:'$2b$10$KnabCCverzpNFeHIbYgo4uTrcWEoJGvj5IBByoJLJ6iZKXq4BYdJS'}
});
})
複製代碼
比對方法異步
bcrypt.compare(data明文, hash加密密碼, cb回調函數)函數
也是異步方法,同步的話使用 compareSync(data, hash) 接收 return 傳過來的布爾值ui
bcrypt.compare(password, secret, (err, result) => {
err ? console.log(err) : console.log(result)
})
複製代碼
若是報錯:Error: data and hash arguments required
加密
檢查 bcrypt.compare 第二個參數是否爲undefined;spa