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

做网站政府扶持app下载注册量推广平台

做网站政府扶持,app下载注册量推广平台,只会html wordpress,网站导航仿站文章目录 前言🧨 什么是彩虹表攻击?📷 图中解析左侧是彩虹表:右侧是用户数据库中的数据: 🔐 如何防御彩虹表攻击?✅ 1. **使用 Salt 加密(推荐)**✅ 2. **使用强哈希函数…

文章目录

  • 前言
    • 🧨 什么是彩虹表攻击?
    • 📷 图中解析
      • 左侧是彩虹表:
      • 右侧是用户数据库中的数据:
    • 🔐 如何防御彩虹表攻击?
      • ✅ 1. **使用 Salt 加密(推荐)**
      • ✅ 2. **使用强哈希函数(如 bcrypt、scrypt、argon2)**
      • ✅ 3. **不要用明文密码或简单哈希算法(如 md5/sha1)**
    • ✅ 总结推荐实践
  • Prisma + bcrypt 加密存储密码 实战示例
    • ✅ 1. Prisma 模型定义
    • ✅ 2. 安装 bcrypt
    • ✅ 3. 注册:加密后存入数据库
    • ✅ 4. 登录:验证密码是否匹配
    • ✅ 5. 测试示例
    • 🔐 安全建议
  • **NestJS + Prisma + bcrypt + JWT 登录授权系统** 实战模板
    • 📦 技术栈
    • ✅ 1. 安装依赖
    • ✅ 2. 用户模型(Prisma)
    • ✅ 3. AuthModule 结构
    • ✅ 4. DTO 文件
    • ✅ 5. JWT 策略(jwt.strategy.ts)
    • ✅ 6. AuthService(auth.service.ts)
    • ✅ 7. AuthController(auth.controller.ts)
    • ✅ 8. AuthModule 配置(auth.module.ts)
    • ✅ 9. 使用 JWT 守卫保护路由(可选)
    • ✅ 10. JWT Guard(jwt-auth.guard.ts)
    • 🧪 示例请求
      • 注册
      • 登录
      • 登录成功后返回


前言

一种常见的密码破解方式:彩虹表攻击(Rainbow Table Attack),我们一步步解释:


🧨 什么是彩虹表攻击?

彩虹表攻击是一种基于预计算哈希值反查密码的攻击方式:

  1. 攻击者先构建一个表格:记录常见密码及其哈希值(如 MD5/SHA1);
  2. 获取某网站数据库中的用户密码哈希值
  3. 在彩虹表中查找匹配的哈希值,反推出原始密码

📷 图中解析

左侧是彩虹表:

明文密码对应哈希值
picture1ab2ca3349e27
hitheree3f49eabe8950
mypassword0b0a91823da1d0
monkeya1d01066dd8036

右侧是用户数据库中的数据:

idemailpassword (hash)
1*a@@a.com0b0a91823da1d0

攻击者对照彩虹表发现这个哈希值对应 mypassword,于是破解成功!


🔐 如何防御彩虹表攻击?

✅ 1. 使用 Salt 加密(推荐)

给每个密码增加一个**随机字符串(Salt)**再进行哈希:

password = "mypassword"
salt = "a1b2c3d4"
hash = SHA256("mypassworda1b2c3d4")

即使两个用户用相同密码,生成的哈希也不同!这样彩虹表根本没法提前计算所有组合。

✅ 2. 使用强哈希函数(如 bcrypt、scrypt、argon2)

这些哈希算法设计为:

  • 计算慢(防止暴力破解)
  • 自带 Salt(内置加盐)
  • 可配置强度(提高成本)

例如使用 bcrypt 存密码:

import bcrypt from 'bcrypt';const saltRounds = 10;
const hash = await bcrypt.hash("mypassword", saltRounds);

验证时用:

await bcrypt.compare("mypassword", hashFromDb); // true or false

✅ 3. 不要用明文密码或简单哈希算法(如 md5/sha1)

这些算法太快太弱,容易被彩虹表破解。


✅ 总结推荐实践

做法是否推荐说明
明文存密码❌ 绝对禁止泄露即全部破防
MD5/SHA1❌ 不推荐无加盐太容易被破解
哈希 + Salt✅ 推荐每个用户不同结果,防彩虹表
bcrypt/scrypt/argon2✅ 推荐更安全的现代密码哈希方法

Prisma + bcrypt 加密存储密码 实战示例

以下是使用 Prisma + bcrypt 实现注册和登录时密码加密与验证的完整示例,适合用在 NestJS、Express、Fastify 等 Node.js 框架中。


✅ 1. Prisma 模型定义

// schema.prisma
model User {id        Int     @id @default(autoincrement())email     String  @uniquepassword  String  // 存加密后的哈希值createdAt DateTime @default(now())
}

✅ 2. 安装 bcrypt

npm install bcrypt
# or
pnpm add bcrypt

✅ 3. 注册:加密后存入数据库

import bcrypt from 'bcrypt';
import { PrismaClient } from '@prisma/client';const prisma = new PrismaClient();
const SALT_ROUNDS = 10;async function register(email: string, plainPassword: string) {const hashedPassword = await bcrypt.hash(plainPassword, SALT_ROUNDS);const user = await prisma.user.create({data: {email,password: hashedPassword,},});console.log('User created:', user);
}

✅ 4. 登录:验证密码是否匹配

async function login(email: string, plainPassword: string) {const user = await prisma.user.findUnique({where: { email },});if (!user) {throw new Error('用户不存在');}const isMatch = await bcrypt.compare(plainPassword, user.password);if (!isMatch) {throw new Error('密码错误');}console.log('登录成功:', user);
}

✅ 5. 测试示例

await register('test@example.com', 'mypassword');
// 存入数据库后为 hashed:$2b$10$... (加密值)await login('test@example.com', 'mypassword'); // ✅ 登录成功
await login('test@example.com', 'wrongpass');  // ❌ 抛出密码错误

🔐 安全建议

项目建议值
SALT_ROUNDS10~12,生产建议 12+
哈希算法bcrypt 是安全主流选择,argon2 更现代但略复杂
防止爆破建议结合 JWT + 登录限速(如 express-rate-limit)

NestJS + Prisma + bcrypt + JWT 登录授权系统 实战模板

按模块拆解讲解,包含注册、登录、密码加密、JWT 签发与验证。


📦 技术栈

  • @nestjs/jwt:签发和验证 Token
  • bcrypt:密码加密
  • @prisma/client:数据库 ORM
  • Passport:认证策略(JWT)

✅ 1. 安装依赖

npm install @nestjs/jwt @nestjs/passport passport passport-jwt bcrypt
npm install -D @types/passport-jwt @types/bcrypt

✅ 2. 用户模型(Prisma)

model User {id       Int    @id @default(autoincrement())email    String @uniquepassword StringcreatedAt DateTime @default(now())
}

✅ 3. AuthModule 结构

src/
├── auth/
│   ├── auth.module.ts
│   ├── auth.service.ts
│   ├── auth.controller.ts
│   ├── jwt.strategy.ts
│   └── dto/
│       ├── login.dto.ts
│       └── register.dto.ts

✅ 4. DTO 文件

// dto/register.dto.ts
export class RegisterDto {email: string;password: string;
}// dto/login.dto.ts
export class LoginDto {email: string;password: string;
}

✅ 5. JWT 策略(jwt.strategy.ts)

import { Injectable } from '@nestjs/common';
import { PassportStrategy } from '@nestjs/passport';
import { ExtractJwt, Strategy } from 'passport-jwt';@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {constructor() {super({jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),secretOrKey: 'secretKey', // 改为读取 .env 中 JWT_SECRET});}async validate(payload: any) {return { userId: payload.sub, email: payload.email };}
}

✅ 6. AuthService(auth.service.ts)

import { Injectable } from '@nestjs/common';
import { PrismaService } from '../prisma/prisma.service';
import * as bcrypt from 'bcrypt';
import { JwtService } from '@nestjs/jwt';@Injectable()
export class AuthService {constructor(private prisma: PrismaService,private jwtService: JwtService,) {}async register(email: string, password: string) {const hash = await bcrypt.hash(password, 10);return this.prisma.user.create({data: { email, password: hash },});}async validateUser(email: string, password: string) {const user = await this.prisma.user.findUnique({ where: { email } });if (!user) return null;const isMatch = await bcrypt.compare(password, user.password);return isMatch ? user : null;}async login(user: any) {const payload = { sub: user.id, email: user.email };return {access_token: this.jwtService.sign(payload),};}
}

✅ 7. AuthController(auth.controller.ts)

import { Controller, Post, Body, UnauthorizedException } from '@nestjs/common';
import { AuthService } from './auth.service';
import { RegisterDto, LoginDto } from './dto';@Controller('auth')
export class AuthController {constructor(private authService: AuthService) {}@Post('register')register(@Body() dto: RegisterDto) {return this.authService.register(dto.email, dto.password);}@Post('login')async login(@Body() dto: LoginDto) {const user = await this.authService.validateUser(dto.email, dto.password);if (!user) throw new UnauthorizedException('Invalid credentials');return this.authService.login(user);}
}

✅ 8. AuthModule 配置(auth.module.ts)

import { Module } from '@nestjs/common';
import { JwtModule } from '@nestjs/jwt';
import { PassportModule } from '@nestjs/passport';
import { AuthService } from './auth.service';
import { AuthController } from './auth.controller';
import { JwtStrategy } from './jwt.strategy';
import { PrismaModule } from '../prisma/prisma.module';@Module({imports: [PrismaModule,PassportModule,JwtModule.register({secret: 'secretKey', // 读取自 .envsignOptions: { expiresIn: '1d' },}),],providers: [AuthService, JwtStrategy],controllers: [AuthController],
})
export class AuthModule {}

✅ 9. 使用 JWT 守卫保护路由(可选)

import { UseGuards, Controller, Get } from '@nestjs/common';
import { JwtAuthGuard } from './jwt-auth.guard';@Controller('profile')
export class ProfileController {@UseGuards(JwtAuthGuard)@Get()getProfile(@Request() req) {return req.user;}
}

✅ 10. JWT Guard(jwt-auth.guard.ts)

import { Injectable } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';@Injectable()
export class JwtAuthGuard extends AuthGuard('jwt') {}

🧪 示例请求

注册

POST /auth/register
{"email": "user@example.com","password": "123456"
}

登录

POST /auth/login
{"email": "user@example.com","password": "123456"
}

登录成功后返回

{"access_token": "eyJhbGciOiJIUzI1NiIsInR..."
}

http://www.dtcms.com/wzjs/47596.html

相关文章:

  • 网站建设收费标准报价南京谷歌seo
  • 网站支付链接怎么做的东莞营销型网站建设
  • 这么做网站黄页推广引流网站
  • 深圳市住房与建设局实名制网站百度框架户一级代理商
  • 慈溪市建设局网站外贸平台有哪些
  • 购物网站cookie上海网络公司seo
  • 望京做网站的公司哪家好网页设计主要做什么
  • 有利于优化的网站建设域名注册管理机构
  • 网站建设规划中国企业网
  • 阿迪网站建设规划书网站seo分析案例
  • 引流量的网站免费推广网站排行榜
  • 加油站网架百度商家平台
  • 中国制造网国际站官网引流推广公司
  • 徐汇网站建设公司收录查询站长工具
  • 上海网站优化排名网站建设是干什么的
  • 广州网站建设c2c长春网站建设定制
  • 更改了网站关键词后要怎么做头条新闻 最新消息条
  • 个人网站设计作品html媒体平台
  • 南昌哪家网站建设最好百度网站推广费用
  • 网上哪些网站可以做设计项目网站seo优化培训
  • b2b网站有什么手机app推广平台
  • 怎样自己做qq网站百度推广和优化有什么区别
  • 网站建设移交确认书乐陵seo外包
  • 帝国cms入门到精通企业门户网站制作建站视频教程seo排名优化代理
  • 建设图书馆网站的意义资源优化排名网站
  • web 网站模板google adwords关键词工具
  • 小木桥路建设工程招投标网站seo学途论坛网
  • 商城网站建设平台什么叫软文推广
  • 淮安网站建设哪家好百度资源
  • 外挂网站建设重庆企业免费建站