在软件开发过程中,对于如密码这样的信息,我们不能直接以明文的方式存储在数据库中
在Node中我们若要利用bcrypt算法对数据加密,可以使用第三方模块bcryptjs
npm install bcryptjs
password_verify() 函数用于验证密码是否和散列值匹配。
password_hash() 函数用于创建密码的散列(hash)。
bool password_verify ( string $password , string $hash )
参数说明:
password: 用户的密码。
hash: 一个由 password_hash() 创建的散列值。
string password_hash ( string $password , int $algo [, array $options ] )
password: 一个由 password_hash() 创建的散列值。
algo: 一个用来在散列密码时指示算法的密码算法常量。
options: 一个包含有选项的关联数组。
$algo : 支持的算法 PASSWORD_DEFAULT - 使用 bcrypt 算法 (PHP 5.5.0 默认)。
|
|
|
|
db.getCollection('users').find({'username': 'admin111'}).sort({'_id':-1})
{
"_id" : ObjectId("5de780d9655694f90649d28a"),
"createdAt" : ISODate("2019-12-04T09:48:09.314Z"),
"updatedAt" : ISODate("2021-01-27T02:00:25.036Z"),
"username" : "admin111",
"realname" : "Web后端技术",
"email" : "admin111@wang123.net",
"phone" : "13811112222",
"password" : "$2a$10$1wBgc8M4wwJAnzD4Ptcx6eGQ1gIP8DUqL5.cvTyJCaM7o5ezSMJQ2",
"roles" : [
ObjectId("5588ccc679faf34f2cfc214d")
],
"enabled" : true
}
$pwd = '$2a$10$1wBgc8M4wwJAnzD4Ptcx6eGQ1gIP8DUqL5.cvTyJCaM7o5ezSMJQ2';
var_dump(password_verify('12345678', $pwd)); // bool(true)
用户 admin111 的密码为 12345678
(不建议用这么简单的密码)。
MongoDB 保存的加密后的密码为:$2a$10$1wBgc8M4wwJAnzD4Ptcx6eGQ1gIP8DUqL5.cvTyJCaM7o5ezSMJQ2
在终端用 php 的 password_verify 函数校验一下:
$ php -a
Interactive shell
php > $pwd = '$2a$10$1wBgc8M4wwJAnzD4Ptcx6eGQ1gIP8DUqL5.cvTyJCaM7o5ezSMJQ2';
php >
php > var_dump(password_verify('12345678', $pwd));
bool(true)
php >
可以看到, 校验通过。