nodejsのbcrypt(1):bcryptの特徴と応用
最近はサイトを書き換えて、バックエンドのnodejs+mongoDB.ユーザーが登録するこのブロックには、bcrypt暗号化パスワードを採用し、JWT認証が付与されたソリューションがあります.この詳しくはbcryptです.
bcryptの特徴塩を加える レインボー・テーブルなどのクラック技術は、すべてのパスワードが同じ形式でハッシュ・暗号化されている場合にのみ有効であり、bcryptはランダムに塩を加えてからハッシュを防ぐ方法を採用する. スローハッシュ 塩のハッシュはまだ暴力的に解読される可能性があるので、bcryptは、ハッシュ関数の遅い度合いを決定することができる独自のパラメータを持っています.理想の速度は: ユーザは を感じられません.暴力的に解決しようとする攻撃者は耐えられない.
nodejsの中のbcrypt
以前のプロジェクトでは
しかし、前者はもはやメンテナンスされていません.
bcryptプロジェクトでの応用
ユーザー登録登録ケース(nodejs+mongoDB):ユーザが登録するとき、preフック関数を利用して、パスワードを暗号化して保存します. ユーザがログインすると、次のようにSchema methodのペアが定義されます. server/models/user.js塩を加えてハッシュした後に得られた長い列の文字列にはどんな情報が含まれていますか? は同じパスワードに対して、毎回塩ハッシュを加えて得られた文字列が一致しない場合、暗号化のプロセスはどのように行われますか? は、パスワードに使用されている 次の編に書きましょう.
更新:
nodejsのbcrypt(2):bcrypt浅分析
bcryptの特徴
以前のプロジェクトでは
bcrypt-nodejs
を使用していましたが、このプロジェクトはnode.bcrypt.js
から改善され、後者の依存性が多すぎる空間を占有する欠点を主に最適化しました.しかし、前者はもはやメンテナンスされていません.
bcryptプロジェクトでの応用
ユーザー登録登録ケース(nodejs+mongoDB):
const bcrypt = require('bcryptjs')
const mongoose = require('mongoose')
const Schema = mongoose.Schema
const UserSchema = new Schema(
{
username: ...
... ...
},
{timestamps: true}
)
// , save()
UserSchema.pre('save', function (next) {
const user = this
// “ ”
const SALT_FACTOR = 10
//
bcrypt.genSalt(SALT_FACTOR, function (err, salt) {
if (err) return next(err)
//
bcrypt.hash(user.password, salt, null, function (err, hash) {
if (err) return next(err)
user.password = hash
next()
})
})
})
UserSchema.methods.comparePassword = function (password, cb) {
//
bcrypt.compare(password, this.password, function (err, isMatch) {
if (err) { return cb(err) }
cb(null, isMatch)
})
}
module.exports = mongoose.model('User', UserSchema)
server/appi/login.js... ...
//
user.comparePassword(password, function (err, isMatch) {
if (err) { return console.log(err) }
//
if (!isMatch) {
return res.status(403).json({
error: 'invaild username or password'
})
}
//
return res.json({
user: { ... }
token: ...
})
})
... ...
コードは通じましたが、まだ多くの疑惑が整理されていません.たとえば:bcrypt.js
と比較する方法であり、そのパラメータには、saltが含まれていない.この過程で塩が役に立ちませんか?それとも他のところに隠しますか?更新:
nodejsのbcrypt(2):bcrypt浅分析