zoukankan      html  css  js  c++  java
  • 使用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加密密码计算强度代表什么意思

  • 相关阅读:
    读书笔记——吴军《态度》
    JZYZOJ1237 教授的测试 dfs
    NOI1999 JZYZOJ1289 棋盘分割 dp 方差的数学结论
    [JZYZOJ 1288][洛谷 1005] NOIP2007 矩阵取数 dp 高精度
    POJ 3904 JZYZOJ 1202 Sky Code 莫比乌斯反演 组合数
    POJ2157 Check the difficulty of problems 概率DP
    HDU3853 LOOPS 期望DP 简单
    Codeforces 148D. Bag of mice 概率dp
    POJ3071 Football 概率DP 简单
    HDU4405 Aeroplane chess 飞行棋 期望dp 简单
  • 原文地址:https://www.cnblogs.com/wx1993/p/5250275.html
Copyright © 2011-2022 走看看