当前位置: 首页 > news >正文

node项目前后端密码加密传输及存储方案

前端:使用crypto-js库的SHA256算法,包含用户注册时使用的邮箱加上自定义的secret key生成盐值,接着使用PBKDF2算法进行加密。最后将加密后的密码传给后端。

import CryptoJS from "crypto-js";

export const encryptPassword = (email: string, password: string): string => {
  // 生成盐值
  const salt = CryptoJS.SHA256(
    email,
    import.meta.env.SECRET_KEY
  ).toString();

  // 使用 PBKDF2 进行密码加密
  const key = CryptoJS.PBKDF2(password, salt, {
    keySize: 256 / 32,
    iterations: 600_000, //迭代次数符合OWASP标准
    hasher: CryptoJS.algo.SHA256,
  });
  return key.toString(CryptoJS.enc.Base64);
};

后端:创建用户时,使用bcryptjs库的hash方法对密码进行二次加密,并存入数据库。用户登录时,再用compare方法对密码进行解密。

import * as bcrypt from 'bcryptjs';

export class UsersService {
  async create(createUserDto) {
    // 生成随机盐
    const salt = await bcrypt.genSalt(10);

    // 使用生成的盐进行密码哈希
    const hashedPassword = await bcrypt.hash(createUserDto.password, salt);

    return //略
  }

  async validatePassword(user, password) {
    try {
      // 比较原始密码和存储的哈希密码
      return await bcrypt.compare(password, user.passwordHash);
    } catch (error) {
      console.error('Password validation error:', error);
      return false;
    }
  } 
}

相关文章:

  • SpringBoot调用DeepSeek
  • MySQL表连接详解
  • 爬虫(持续更新ing)
  • Thonny+MicroPython+ESP32开发环境搭建
  • 【leetcode hot 100 189】轮转数组
  • ChatVLA:基于视觉-语言-动作模型的统一多模态理解与机器人控制
  • (2025)Unity调用DeepSeek API (兼容OpenAI SDK)
  • 在Windows实现将Docker Desktop安装至非系统盘(2025年3月测试有效)
  • Kmeans算法来实现RFM指标计算步骤
  • 算法 并查集
  • Axure原型模板与元件库APP交互设计素材(附资料)
  • Bitmap -> Bitmap安卓设备上的显示和内存
  • 汽车轮胎损伤缺陷分割数据集labelme格式1957张3类别
  • iOS安全和逆向系列教程 第1篇: iOS逆向工程概述与学习路线图
  • 第七章:项目实战 - 第四节 - Tailwind CSS 移动端适配实践
  • 计算机毕业设计SpringBoot+Vue.js装饰工程管理系统(源码+文档+PPT+讲解)
  • 算数操作符、赋值操作符、单目操作符、强制类型转换
  • 五、Redis 持久化:RDB 与 AOF 深入解析与优化策略
  • linux一些使用技巧
  • Rust 入门+语法详解+Windows 下 Cursor AI辅助开发
  • 如何做淘宝联盟网站的推广/baike seotl
  • 网站空间换了 使用原有域名/关于普通话的手抄报
  • html5网站开发视频/最近发生的重大新闻
  • 二级域名网站建设/自己建网站
  • 政府网站规范化建设方案/海淀区seo搜索引擎优化企业
  • 北京免费做网站/seo上海推广公司