使用bcrypt进行用户密码加密的简单实现
Bcrypt百度百科: bcrypt,是一个跨平台的文件加密工具。由它加密的文件可在所有支持的操作系统和处理器上进行转移。它的口令必须是8至56个字符,并将在内部被转化为448位的密钥。
- var mongoose = require('mongoose');
- // 引入bcrypt模块
- var bcrypt = require('bcrypt');
- // 定义加密密码计算强度
- var SALT_WORK_FACTOR = 10;
- // 连接数据库
- mongoose.connect('mongodb://localhost:27017/test')
- // 定义用户模式
- var UserSchema = new mongoose.Schema({
- name: {
- unique: true,
- type: String
- },
- password: {
- unique: true,
- type: String
- }
- },{ collection: "user"});
- // 使用pre中间件在用户信息存储前进行密码加密
- UserSchema.pre('save', function(next){
- var user = this;
- // 进行加密(加盐)
- bcrypt.genSalt(SALT_WORK_FACTOR, function(err, salt){
- if(err){
- return next(err);
- }
- bcrypt.hash(user.password, salt, function(err, hash){
- if(err){
- return next(err);
- }
- user.password = hash;
- next();
- })
- });
- });
- // 编译模型
- var UserBox = mongoose.model('UserBox', UserSchema);
- // 创建文档对象实例
- var user = new UserBox ({
- name : "Jack" ,
- password : "123456"
- });
- // 保存用户信息
- user.save(function(err, user){
- if(err){
- console.log(err);
- }else{
- // 如果保存成功,打印用户密码
- console.log("password: " + user.password);
- }
- })
运行代码,输出结果如下:
可以发现,保存到数据库中的是加密后的密码。
*SALT_WORK_FACTOR 表示密码加密的计算强度,从1级到10级,强度越高,密码越复杂,计算时间也越长。
值得注意的是,强度为1-3时强度太低,系统会默认使用强度为10的计算方式进行加密。如下,相关问题可以参考:
bcrypt加密密码计算强度代表什么意思
使用bcrypt进行用户密码加密的简单实现的更多相关文章
- 使用mongoose和bcrypt实现用户密码加密
前面的话 最近在做的个人项目中,需要对密码进行加密保存,对该操作的详细步骤记录如下 介绍 关于mongoose已经写过博客就不再赘述,下面主要介绍bcrypt bcrypt是一个由两个外国人根据Blo ...
- Maven-009-Nexus 用户密码加密(安全必须)
信息数据大爆发的时代,我们关心什么?没错,数据安全!数据安全!数据安全!(重要事情说三遍,哈哈哈...) 之前我们存放在 maven settings.xml 文件中的 Nexus 私服用户密码都是明 ...
- Cognos权限认证CJP方式之用户密码加密
在项目开发过程中,用户往往对系统的安全都有明确的要求,下面针对cognos门户认证用户密码如何加密来提供一个简单的wf 1Cognos权限认证方式:CJP 2Cognos用户数据库类型:Oracle ...
- C#:使用MD5对用户密码加密与解密
C#中常涉及到对用户密码的加密于解密的算法,其中使用MD5加密是最常见的的实现方式.本文总结了通用的算法并结合了自己的一点小经验,分享给大家. 一.使用16位.32位.64位MD5方法对用户名加密 1 ...
- c# 对用户密码加密解密
一.使用16位.32位.64位MD5方法对用户名加密 1)16位的MD5加密 ? 1 2 3 4 5 6 7 8 9 10 11 12 /// <summary> /// 16位MD5加密 ...
- 转 C#:使用MD5对用户密码加密与解密
C#中常涉及到对用户密码的加密于解密的算法,其中使用MD5加密是最常见的的实现方式.本文总结了通用的算法并结合了自己的一点小经验,分享给大家. 一.使用16位.32位.64位MD5方法对用户名加密 1 ...
- php提供的用户密码加密函数
在实际项目中,对用户的密码加密基本上采用的 md5加盐的方式, php5.5后提供了一个加密函数,不需要手动加盐,不需要去维护盐值, $str = "123456"; $pwd ...
- java工具类学习,系统中用户密码加密总结
现在项目,用户注册登录部分很少有涉及到了,原因:现在热门开发框架都已经在底层帮我们做了一套用户注册,密码加密,登录认证,权限控制,缓存数据等基本功能. 这有利于项目的快速完成,只需要搬砖码畜们专注于业 ...
- Openfire用户密码加密解密
需求要求审核过程中都用匿名进行用户注册登录,注册用户审核通过后才使用openfire内置表 如何做到用户密码统一 Openfire是通过org.jivesoftware.util.Blowfish.j ...
随机推荐
- LightOJ1025 The Specials Menu(区间DP)
给一个字符串,问有几种删字符的方式使删后的非空字符串是个回文串. 当然区间DP:dp[i][j]表示子串stri...strj的方案数 感觉不好转移,可能重复算了.我手算了"AAA" ...
- TYVJ P1024 外星人的密码数字
做题记录:2016-08-16 20:09:30 描述 XXXX年突然有外星人造访,但大家语言不通,不过科学家们经过研究发现外星人用26个英文字母组成的单词中最长不降子序列的长度来表述数字,且 ...
- 【wikioi】1022 覆盖(匈牙利)
http://www.wikioi.com/problem/1022/ 好不容易来一次1A,,水题啊.. 染色后裸匈牙利orz #include <cstdio> #include < ...
- 用edtftpj实现Java FTP客户端工具
edtftpj是一个java FTP工具包,使用非常方便,感觉比Apache的好用,但Apache更灵活.edtftpj有多种版本,分别是java..net和js版本.对于Java版的有一个免费版本. ...
- _jobdu_1001
/************************************************************************/ /* 题目描述: This time, you a ...
- jquery限制div字符长度,超出部分已“…”显示
$(".content").each(function(){ if($(this).text().length>100){ $(this).text($(this).text ...
- Asp反向代理程序,调用远程站点全站数据,一款脚本级反向代理程序.
前些天临时写的一脚本级反向代理程序,用法很简单,设置好目标站地址,然后放到你网站根目录:index.asp,再将404页面自定义为:index.asp,即可. 由于暂时没有 url 替换需要,所以没有 ...
- Java泛型总结
1. 什么是泛型?泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的 ...
- Union大小
在一个union类型结构中,所有的成员公用同样的存储空间,其占用的大小为其成员中需要空间最大者: union本身只保留一块地址空间,因为只有一个成员真正存储于该地址, 但这块地址也要满足内存对齐原则. ...
- 对于flat_interface与public_interface的理解
对于这两个interface含义的理解一波三折,下面我把各种理解都记录下来. 2014-9-23 #可以把flat_interface理解为Openstack整套生态系统内部的网络接口,内部各 ...