nestjs使用crypto对密码加密

本文介绍了如何在NestJS应用中使用`crypto`模块进行密码加密和解密,包括在`CryptoService`中创建HMAC算法,以及在`AuthModule`和`AuthService`中应用这些服务进行登录和注册时的密码验证。
摘要由CSDN通过智能技术生成

安装依赖

pnpm install crypto --save

1.编写加密和解密

import { Injectable } from "@nestjs/common";
import { ConfigService } from "@nestjs/config";
import * as crypto from "crypto";

@Injectable()
export class CryptoService {

    constructor(
        private configService: ConfigService,
    ) {}

    //加密
    async careatePassword(password: string): Promise<string> {

        const hmac = crypto.createHmac('sha256', this.configService.get('crypto').secret);
        hmac.update(password);
        return hmac.digest('hex');
    }

    //验证密码
    async checkPassword(password: string, hash_password: string): Promise<boolean> {

        //先对需要验证的密码进行加密
        password = await this.careatePassword(password);

        return password === hash_password;
    }
}

2. 在auth.module.ts中引入

@Module({
  //导入进来UserModule
  imports: [],
  exports: [],
  controllers: [AuthController],
  providers: [
    CryptoService
  ],
})
export class AuthModule {}

3. 在auth.service.ts中, 登录时验证密码。



@Injectable()
export class AuthService {

    constructor(

       private cryptoService: CryptoService
    ) {}
    
    //登录
    async manageLogin(username: string, password: string) {
        
      
        let checkPassword = await this.cryptoService.checkPassword(password, user.password);
        if(!checkPassword) throw new HttpException('密码错误', 404);
    }
    
}

4. 在注册时,对前端传回来的密码进行加密

//对密码进行加密
        let hash_password = await this.cryptoService.careatePassword(password);

 

在Nest.js中,你可以使用crypto-js库进行加密和解密操作。crypto-js是一个JavaScript加密库,它提供了各种常见的加密算法,如AES、DES、SHA等。要在Nest.js中使用crypto-js,你需要先安装它。 首先,在你的Nest.js项目中打开终端,并运行以下命令来安装crypto-js库: ```bash npm install crypto-js ``` 安装完成后,你可以在你的代码中引入crypto-js并使用它的加密和解密功能。以下是一个简单的示例: ```typescript import { Injectable } from "@nestjs/common"; import * as CryptoJS from 'crypto-js'; @Injectable() export class CryptoUtil { encrypt(text: string, secretKey: string): string { return CryptoJS.AES.encrypt(text, secretKey).toString(); } decrypt(ciphertext: string, secretKey: string): string { const bytes = CryptoJS.AES.decrypt(ciphertext, secretKey); return bytes.toString(CryptoJS.enc.Utf8); } } ``` 上面的代码示例展示了如何在Nest.js的CryptoUtil类中使用crypto-js库进行加密和解密操作。在encrypt方法中,我们使用AES算法和给定的密钥对文本进行加密。在decrypt方法中,我们使用相同的密钥对密文进行解密。 你可以根据自己的需求调整和扩展这个示例。请注意,为了使用crypto-js库,你需要在文件头部引入CryptoJS,并使用`import * as CryptoJS from 'crypto-js';`语句。 希望这个示例对你理解在Nest.js中使用crypto-js进行加解密有所帮助。如果你还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值