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 ...