美文网首页
node.js密码加密实践

node.js密码加密实践

作者: let423 | 来源:发表于2019-03-16 11:39 被阅读0次

crypto

crypto 模块提供了加密的功能,包括对 OpenSSL 的哈希、HMAC、加密、解密、签名、以及验证功能的一整套封装


const crypto = require('crypto');   // 使用require('crypto')来访问该模块
const secret = 'abcdefg';
const hash = crypto.createHamc('sha256', secret).update('I love cupcakes').digest('hex');
console.log(hash);

想要了解更多关于crypto模块的知识可以去看相关的知识,这里就不多说了
链接:http://nodejs.cn/api/crypto.html

实践

1. 关键代码

注册登录要以相同的方式进行处理,这样子的密码才会一致

const crypto = require('crypto');   // 引入加密模块

let userPwd = req.body.userPwd,
    md5 = crypto.createHash("md5");     // md5加密
let newPwd = md5.update(userPwd).digest("hex");

2. 前置

引入模块、参数定义、数据库连接

require('./../util/util');
let express = require('express');
let router = express.Router();
let mongoose = require('mongoose');
let Users = require('../models/users');

const crypto = require('crypto');   // 引入加密模块

const SUCCESS = 2000;       // 请求成功
const NO_LOGIN = 4003;      // 未登录
const NO_POWER = 4001;      // 没有权限
const ERROR = 5000;         // 请求失败
const EXCEPTION = 4005;     // 异常
const WARN = 2001;          // 警告

mongoose.connect('mongodb://127.0.0.1:27017/teacher', {useNewUrlParser: true});

mongoose.connection.on('connected', function () {
    console.log('MongoDB connected success.');
});

mongoose.connection.on('error', function () {
    console.log('MongoDB connected fail.');
});

mongoose.connection.on('disconnected', function () {
    console.log('MongoDB connected disconnected.')
});

/* GET users listing. */
router.get('/', function(req, res, next) {
  res.send('respond with a resource');
});

3. 注册

// 注册 
router.post('/register', function (req, res, next) {
    let phone = req.body.phone,
        userPwd = req.body.userPwd,
        md5 = crypto.createHash("md5");
    let newPwd = md5.update(userPwd).digest("hex");
    let param = {
        createDate: '',
        phone: phone,
        userPwd: newPwd
    }
    // 检验手机号码是否被注册过
    Users.findOne({phone: param.phone}, function (err, doc) {
        if (err) {
            res.json({
                code: ERROR,
                msg: err.message,
                result: ''

            })
        } else {
            if (doc) {  // 手机号码被注册过
                res.json({
                    code: WARN,
                    msg: '该手机号码已被注册过',
                    result: ''
                })
            } else {    // 手机号码没有被注册过
                let createDate = new Date().Format('yyyy-MM-dd hh:mm:ss');
                param.createDate = createDate;
                Users.insertMany([param], function(err2, doc2) {
                    if (err2) {
                        res.json({
                            code: ERROR,
                            msg: err.message,
                            result: ''
                        })
                    } else {
                        res.json({
                            code: SUCCESS,
                            msg: '注册成功',
                            result: doc2
                        })
                    }
                })
            }
        }
    })
});

4. 登录


// 登录
router.post('/login', function (req, res, next) {
    let phone = req.body.phone,
        userPwd = req.body.userPwd;
    let md5 = crypto.createHash("md5");
    let pwd = md5.update(userPwd).digest("hex");
    let param = {
        phone: phone,
        userPwd: pwd
    }
    Users.findOne(param, function(err, doc) {
        if (err) {
            res.json({
                code: ERROR,
                msg: err.message,
                result: ''
            })
        } else {
            if (doc) {
                    // 存储cookie
                res.cookie('userId', doc._id, {
                    path: '/',
                    maxAge: 1000 * 60 * 60
                });
                res.json ({
                    code: SUCCESS,
                    msg: '登录成功',
                    result: {
                        phone: doc.phone,
                        userId: doc._id
                    }
                })
            } else {
                res.json ({
                    code: WARN,
                    msg: '账号或密码错误',
                    result: ''
                })
            }
        }
    })
});

相关文章

  • node.js密码加密实践

    crypto crypto 模块提供了加密的功能,包括对 OpenSSL 的哈希、HMAC、加密、解密、签名、以及...

  • Node.js 加密算法模版代码

    ???本文是通过 Node.js 实现密码学中所涉及到的哈希算法、对称加密算法、非对称加密算法、密钥交换算法、数字...

  • NodeJs crypto 加密制作 token

    Node.js 内置的 Crypto 库 ,它提供各种加密算法,可以非常方便地让我们使用密码技术,解决应用开发中的...

  • 4-对称加密

    对称加密与非对称加密 按照密钥的特征不同, 密码体制分为对称密码体制和非对称密码体制。对称加密和非对称加密都是可逆...

  • 前端学习笔记十九-MongoDB+Express开发项目知识点

    一、密码加密 bcrypt 哈希加密是单程加密方式:1234 => abcd在加密的密码中加入随机字符串可以增加密...

  • 密码学及iOS签名(一) —— 加密解密

    加密解密类型 对称加密 公钥密码(非对称加密) 对称加密(常见的DES、 3DES、AES) 在对称密码中,加密、...

  • 文件/文件夹加密操作

    给 PDF 添加密码保护 你可以给 PDF 添加密码,这样每个人都需要输入密码才能打开该文件。密码用于加密文件。 ...

  • 前后端数据传输安全——加密浅析

    加密 本文内容: 密码学起源 古典密码学 现代密码学 对称加密 非对称加密 数字签名 哈希 密码学起源: 在战争中...

  • Node功能型第三方模块

    1. 密码加密 bcrypt 哈希加密是单程加密方式:1234 => abcd 在加密的密码中加入随机字符串可以增...

  • 密码技术(六)之混合密码

    混合密码  混合密码用对称密码来加密明文,用公钥密码来加密对称密码中所使用密钥。通过使用混合密码系统,就能够在通信...

网友评论

      本文标题:node.js密码加密实践

      本文链接:https://www.haomeiwen.com/subject/euwjmqtx.html