bcrypt單向加密的使用 和 密鑰yuè比對的使用方法

今天才知道密鑰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

相關文章
相關標籤/搜索