Bcrypt是一個跨平台的文件加密工具。
為了保護用戶的明文密碼不被泄露,一般會對密碼進行單向不可逆加密——哈希。
而Bcrypt恰恰就做到這一點,通過Bcrypt加密的明文密碼即使解密也不是真的“解密”,哪怕是內部人員,也不會看到密碼。
這大大的提高了用戶的安全級別。那么怎么使用呢?這里我用node的項目演示。
首先引入Bcrypt
yarn add bcrypt
這是一個用戶注冊時輸入的密碼
if (isSigned) { res.render('user', { ret: true, data: JSON.stringify({ msg: '用戶名已經存在!' }) }) // 當用戶沒有注冊時,首先將密碼加密,再將用戶名和加密后的密碼入庫 } else { let result = await userModel.signup({ username, password: await _doCrypto(password) }) } //將從前端接受到的password進行加密 const _doCrypto = (password) => { return new Promise((resolve) => {
//這里的salt值,每次都是不一樣的,也是根據取到不同的salt,所以每次的加密結果都不一樣 bcrypt.genSalt(10, function (err, salt) { bcrypt.hash(password, salt, function (err, hash) { resolve(hash) }); }); }) }
登錄時我們可以這樣進行驗證
//密碼認證 let isCorrect = await _comparePwd(password, result.password) //通過_comparePwd方法將用戶輸入的明文與數據的加密過的進行比對 const _comparePwd = (fromUser, fromDatabase) => { return new Promise((resolve) => { bcrypt.compare(fromUser, fromDatabase, (err, res) => { resolve(res) }) }) }
為了系統的安全性與用戶的體驗,使用bcrypt加密工具還是必不可少的