nodejs中使用bcrypt加密

2021-08-10 19:44:53 字數 1920 閱讀 9069

bcrypt演算法簡介

bcrypt演算法相對來說是運算比較慢的演算法,在密碼學界有句常話:越慢的演算法越安全。演算法越算,黑客破解成本越高.通過salt和const這兩個值來減緩加密過程,ta的加密時間(百ms級)遠遠超過md5(大概1ms左右)。對於計算機來說,bcrypt 的計算速度很慢,但是對於使用者來說,這個過程不算慢。bcrypt是單向的,而且經過salt和cost的處理,使其受rainbow攻擊破解的概率大大降低,同時破解的難度也提公升不少,相對於md5等加密方式更加安全,而且使用也比較簡單.

bcrypt加密後的字串形如:2a

10as

djfl

kayd

giga

dfah

gl.a

sdfa

oygo

qhga

sldh

f,其中

: 是分割符,無意義;2a是bcrypt加密版本號;10是cost的值;而後的前22位是salt值;再然後的字串就是密碼的密文了;這裡的const值即下面**中的saltrounds,生成salt的迭代次數,預設值是10,推薦值12。

使用npm bcrypt模組的兩種方式:

sync同步寫法(同步寫起來簡單,沒太大影響)

//引入bcrypt模組

var bcrypt = require('bcrypt');

//post /signup使用者註冊

router.post('/', checknotlogin, function

(req, res, next)

//使用者資訊寫入資料庫

usermodel.create(user)

.then(function

(result))

.catch(function

(e) next(e)

})} //post /signin 使用者登入

router.post('/', checknotlogin, function

(req, res, next)else

}).catch(next)

})

async非同步寫法(稍微麻煩些,推薦)
//引入bcrypt模組

var bcrypt = require('bcrypt');

//post /signup使用者註冊

router.post('/', checknotlogin, function

(req, res, next))

})//儲存使用者資訊

function

storeuinfo

() //使用者資訊寫入資料庫

usermodel.create(user)

.then(function

(result))

.catch(function

(e) next(e)

})} //post /signin 使用者登入

router.post('/', checknotlogin, function

(req, res, next))

// 嘗試登入

function

trylogin

(pwdmatchflag)else}})

.catch(next)

})

為什麼建議使用非同步模式?

如果你在乙個簡單的指令碼上使用bcrypt,使用同步模式是非常好的。

但是,如果您在伺服器上使用bcrypt,則建議使用非同步模式。

這是因為bcrypt完成的雜湊是cpu密集型的,所以同步版本將阻止事件迴圈,並阻止你的應用程式服務於任何其他入站請求或事件。

參考閱讀

nodejs 中使用shell指令碼

雖然nodejs的require child process execsync可以使用shell,但其實問題特別多。尤其是符號和語法衝突,可讀性也很差,只能完成一些小規模的shell使用。const exec require child process execsync 執行,刪除.dist目錄下所...

nodejs 中使用shell指令碼

雖然nodejs的require child process execsync可以使用shell,但其實問題特別多。尤其是符號和語法衝突,可讀性也很差,只能完成一些小規模的shell使用。const exec require child process execsync 執行,刪除.dist目錄下所...

nodejs中使用monk訪問mongodb

mongodb 安裝mongodb 我覺得還是用mannual install靠譜一點兒 啟動mongodb mongod 連線mogodb mongo writeresult mongo db.products.find pretty 在nodejs中用monk訪問mongodb cd monk ...