使用bcrypt进行加密的简单实现

Bcrypt百度百科: bcrypt,是一个跨平台的文件加密工具。由它加密的文件可在所有支持的操作系统和处理器上进行转移。它的口令必须是8至56个字符,并将在内部被转化为448位的密钥。

除了对您的数据进行加密,默认情况下,bcrypt 在删除数据之前将使用随机数据三次覆盖原始输入文件,以阻挠可能会获得您的计算机数据的人恢复数据的尝试。如果您不想使用此功能,可设定禁用此功能。
bcrypt 使用的是布鲁斯·施内尔在1993年发布的 Blowfish 加密算法。具体来说,bcrypt 使用保罗·柯切尔的算法实现。随 bcrypt 一起发布的源代码对原始版本作了略微改动。
 
简单的说,Bcrypt就是一款加密工具,可以比较方便地实现数据的加密工作。下面是使用Bcrypt对数据加密的一个简单的栗子:
 
 1 var mongoose = require('mongoose');
 2 // 引入bcrypt模块
 3 var bcrypt = require('bcrypt');
 4 // 定义加密密码计算强度
 5 var SALT_WORK_FACTOR = 10;
 6 
 7 // 连接数据库
 8 mongoose.connect('mongodb://localhost:27017/test')
 9 
10 // 定义用户模式
11 var UserSchema = new mongoose.Schema({
12     name: {
13         unique: true,
14         type: String
15     },
16     password: {
17         unique: true,
18         type: String
19     }
20 },{ collection: "user"});
21 
22 // 使用pre中间件在用户信息存储前进行密码加密
23 UserSchema.pre('save', function(next){
24     var user = this;
25 
26     // 进行加密(加盐)
27     bcrypt.genSalt(SALT_WORK_FACTOR, function(err, salt){
28         if(err){
29             return next(err);
30         }
31         bcrypt.hash(user.password, salt, function(err, hash){
32             if(err){
33                 return next(err);
34             }
35             user.password = hash;
36             next();
37         })
38     });
39 });
40 
41 // 编译模型
42 var UserBox = mongoose.model('UserBox', UserSchema);
43 
44 // 创建文档对象实例
45 var user = new UserBox ({
46    name : "Jack" ,
47    password : "123456"
48 });
49 
50 // 保存用户信息
51 user.save(function(err, user){
52     if(err){
53         console.log(err);
54     }else{
55         // 如果保存成功,打印用户密码
56         console.log("password: " + user.password);
57     }
58 })

运行代码,输出结果如下: 

可以发现,保存到数据库中的是加密后的密码。

 

*SALT_WORK_FACTOR 表示密码加密的计算强度,从1级到10级,强度越高,密码越复杂,计算时间也越长。

值得注意的是,强度为1-3时强度太低,系统会默认使用强度为10的计算方式进行加密。如下,相关问题可以参考:

bcrypt加密密码计算强度代表什么意思

 

 

 

 

 

posted @ 2016-03-07 13:57  Raychan  阅读(17541)  评论(0编辑  收藏  举报