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

Node.js 》》bcryptjs 加密

bcryptjs

# 安装npm install bcryptjs# 基本用法 #1. 同步哈希和验证const bcrypt = require('bcryptjs');// 哈希密码const salt = bcrypt.genSaltSync(10); // 生成盐,10是成本因子const hashedPassword = bcrypt.hashSync('myPassword123', salt);console.log('Hashed Password:', hashedPassword);// 验证密码const isValid = bcrypt.compareSync('myPassword123', hashedPassword);console.log('Password valid:', isValid); // trueconst isInvalid = bcrypt.compareSync('wrongPassword', hashedPassword);console.log('Password valid:', isInvalid); // false
# 2. 异步哈希和验证(推荐)const bcrypt = require('bcryptjs');async function hashAndVerify() {try {// 哈希密码const salt = await bcrypt.genSalt(10); // 生成盐const hashedPassword = await bcrypt.hash('myPassword123', salt);console.log('Hashed Password:', hashedPassword);// 验证密码const isValid = await bcrypt.compare('myPassword123', hashedPassword);console.log('Password valid:', isValid); // trueconst isInvalid = await bcrypt.compare('wrongPassword', hashedPassword);console.log('Password valid:', isInvalid); // false} catch (err) {console.error('Error:', err);}}	hashAndVerify();

在实际应用中的使用示例

const express = require('express');
const bcrypt = require('bcryptjs');
const app = express();app.use(express.json());// 模拟数据库
const users = [];// 注册路由
app.post('/register', async (req, res) => {try {const { username, password } = req.body;// 检查用户是否已存在const userExists = users.some(user => user.username === username);if (userExists) {return res.status(400).json({ message: '用户名已存在' });}// 哈希密码const salt = await bcrypt.genSalt(10);const hashedPassword = await bcrypt.hash(password, salt);// 存储用户const newUser = {id: Date.now().toString(),username,password: hashedPassword};users.push(newUser);res.status(201).json({ message: '用户注册成功', userId: newUser.id });} catch (err) {res.status(500).json({ message: '注册失败', error: err.message });}
});// 登录路由
app.post('/login', async (req, res) => {try {const { username, password } = req.body;// 查找用户const user = users.find(user => user.username === username);if (!user) {return res.status(401).json({ message: '用户名或密码错误' });}// 验证密码const isValidPassword = await bcrypt.compare(password, user.password);if (!isValidPassword) {return res.status(401).json({ message: '用户名或密码错误' });}res.json({ message: '登录成功', userId: user.id });} catch (err) {res.status(500).json({ message: '登录失败', error: err.message });}
});const PORT = 3000;
app.listen(PORT, () => {console.log(`服务器运行在 http://localhost:${PORT}`);
});
http://www.lryc.cn/news/614390.html

相关文章:

  • Kafka + 时间轮 + 数据库实现延迟队列方案
  • 全场景音频工作流实践:Melody如何打造音源管理闭环
  • 使用FinTSB框架进行金融时间序列预测的完整指南
  • (Arxiv-2025) CINEMA:通过基于MLLM的引导实现多主体一致性视频生成
  • iOS混淆工具有哪些?跨平台 App 混淆与保护的实用方案
  • Flutter开发 SingleChildScrollView、ScrollController
  • 大语言模型提示工程与应用:提示词基础使用方式
  • 【重学MySQL】事务隔离
  • 单层 PDF 与双层 PDF:一字之差,功能大不同
  • 学生如何使用 DeepSeek 帮助自己的学习?
  • 自有域名功能详解——安全可控的企业级访问方案
  • select ... for update阻塞
  • 智慧社区(九)——事务加持下的小区删除操作
  • 前端老项目依赖安全漏洞解决
  • 如何使用 pg_rman 进行 PostgreSQL 的备份与恢复
  • 超算中心的基本组成,国内有哪些比较有名的超算中心?
  • 【网络】TCP/UDP协议
  • Word中怎样插入特殊符号
  • Spring Boot + ECharts 极简整合指南:从零实现动态数据可视化大屏
  • Linux常见服务器配置(三):MariaDB数据库管理和WEB服务器
  • 京东一面:MySQL 主备延迟有哪些坑?主备切换策略
  • Linux 学习 ------Linux 入门(上)
  • LINUX88 变量:命令定义;普通数组定义(复);declare -i /-x
  • 医防融合中心-智慧化慢病全程管理医疗AI系统开发(中)
  • (数据结构)链表
  • 从零开始构建【顺序表】:C语言实现与项目实战准备
  • Autosar AP中Promise和Future的异步消息通信的详细解析
  • 深入理解VideoToolbox:iOS/macOS视频硬编解码实战指南
  • FreeRTOS入门知识(初识RTOS)(二)
  • 2025-08-08 李沐深度学习11——深度学习计算