Express/mongoose对数据库中密码加密处理

项目搭建及配置

使用Express创建一个服务端项目 创建express此处有详解

不在过多讲解以上的配置及创建

###

明确为甚么要对重要数据加密?

密码加密是一种保护用户数据安全的重要措施。加密密码可以确保未经授权的人无法访问用户帐户或敏感信息,即使数据库或服务器被攻击者入侵也是如此,无法获取到你的密码。

  • 防止数据泄露:如果用户密码以明文存储在数据库中,则任何人都可以轻松地访问它们。如果数据库或服务器被攻击,则攻击者可以窃取这些密码并访问用户数据。使用加密密码可以防止这种情况发生。

  • 保护用户隐私:用户密码通常与他们的个人身份信息和其他敏感数据相关联。如果这些密码被暴露,攻击者可以窃取用户身份并利用其个人信息进行恶意活动。通过加密密码,可以确保用户数据保持私密。

  • 符合法规要求:在某些情况下,法规可能要求组织对存储在其系统中的用户数据进行加密。例如,根据欧洲通用数据保护条例(GDPR)等法规,组织必须采取适当的安全措施来确保个人数据的保密性和完整性。

###

bcryptjs 模块是什么?

bcryptjs 模块是一个用于密码哈希和验证的 JavaScript 库。它提供了一种安全的方式来存储用户密码,以防止密码泄露时的潜在风险。

bcryptjs 使用了 bcrypt 算法,这是一个基于 Blowfish 密码加密算法的适用于密码哈希的函数。bcrypt 算法通过将密码进行多次迭代的哈希处理,并添加随机的 salt(盐)值来增加密码的安全性。这种方式使得密码哈希的破解变得非常困难,即使在大规模的计算资源攻击下也能提供较高的安全性。

使用 bcryptjs 模块,开发者可以轻松地对用户密码进行哈希处理,并将密码哈希值存储在数据库中。当需要验证用户密码时,可以使用相同的哈希算法和 salt 值来比较用户输入的密码与存储的哈希值是否匹配,从而验证密码的正确性。

###

安装bcryptjs模块

npm i bcryptjs  // bcryptjs模块

### 

接口配置

直接在文件中配置即可

var express = require("express");
var router = express.Router();
const mongoose = require("mongoose");
const bcryptjs = require("bcryptjs"); // 引入bcryptjs模块

const User = mongoose.model(
  "user",
  {
    username: String,
    password: {
      type: String,
      set(val) {
        // 每次数据库进行修改或插入时都会执行set
        return bcryptjs.hashSync(val); // 对存入数据库的密码进行加密
      },
    },
  },
  "user"
);

router.post("/regs", async (req, res) => {
  // 上面定义了set方法所以这里直接入库
  await User.create(req.body);
  res.send({ code: 200, message: "注册成功" });
});

router.post("/login", async (req, res) => {
  let username = req.body.username;
  let password = req.body.password;
  let user = await User.findOne({ username });
  if (!user) {
    return res.send({ code: 401, message: "没有这个用户!" });
  }
  // 使用bcryptjs.compareSync方法进行验证,第一个参数是要验证的字符串,第二个参数是加密过的字符串
  if (!bcryptjs.compareSync(password, user.password)) {
    return res.send({ code: 402, message: "密码错误!" });
  }
  res.send({ code: 200, message: "登录成功!" });
});
module.exports = router;

###

bcryptjs提供的方法

bcryptjs 提供了两个同步的方法:compareSynchashSync。这两个方法与异步方法 comparehash 的作用相同,只是它们是同步调用的,而不是通过回调函数来处理结果。这些同步方法可以更简单地在代码中使用,但不能在 Node.js 事件循环中执行,并且如果密码哈希或验证操作非常耗时,则会阻塞应用程序。

  1. bcryptjs.compareSync(data, encrypted) 方法:

  • 这个方法同步比较明文数据和已加密的数据是否匹配。
  • data 是未加密的数据。
  • encrypted 是已加密的数据。
  • 如果匹配返回 true,否则返回 false
  1. bcryptjs.hashSync(data, saltRounds) 方法:

  • 这个方法将一个数据(通常是用户密码)同步进行哈希处理,并返回生成的哈希值。
  • data 是需要被哈希的原始数据(例如用户输入的密码)。
  • saltRounds 指定哈希计算的轮数,通常建议设置为 10 到 12 之间的数值。
  • 返回生成的哈希字符串。

这两个同步方法与异步方法的使用方式相同,只是它们不需要回调函数来处理结果。如果应用程序的性能要求较低,并且不需要异步处理密码哈希和验证过程,那么可以使用这些同步方法。否则,建议尽可能使用异步方法,以充分利用 Node.js 的非阻塞 I/O 特性。

###

验证结果展示

注册:

登录验证:

 账号不正确时

密码不正确时 

账号密码都正确时

 

 

  • 65
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HBuilderX是一款由DCloud(达摩院)开发的前端开发工具,它集成了Eclipse的开发框架和Vue.js、WebStorm等优秀的前端技术栈,但并不是一个专门用于数据库连接的工具。HBuilderX主要用于构建Web应用,它的数据库连接通常是在项目使用前端开发技术,如JavaScript,配合后端语言(如Node.js、Java、PHP等)来完成。 如果你在HBuilderX项目需要连接数据库,通常会经历以下步骤: 1. **选择后端框架**:例如,你可以使用Node.js的Express.js或Django(Python)来搭建服务器端。 2. **安装数据库驱动**:对于MySQL,使用`mysql2`(Node.js)、`django.db`(Python)等库;对于MongoDB,使用`mongoose`(Node.js)或`pymongo`(Python)。 3. **配置数据库连接**:在项目配置文件或启动脚本设置数据库URL,通常包括主机名、端口、用户名、密码数据库名。 4. **编写数据操作代码**:在HBuilderX的前端页面,你可以通过Ajax请求或Fetch API发起HTTP请求到后端API,来进行CRUD(创建、读取、更新、删除)操作,后端再通过数据库驱动处理这些请求。 5. **安全考虑**:确保所有敏感信息(如数据库凭证)在生产环境进行加密或不在前端直接硬编码。 相关问题: 1. HBuilderX支持哪些后端框架来连接数据库? 2. 如何在HBuilderX发送HTTP请求来访问后端数据库API? 3. 数据库连接池在HBuilderX项目的作用是什么?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值