Skip to content

nest 实现 aes 加密解密和 md5 加密

安装

bash
pnpm install crypto-js

创建 crypto 模块

crypto.module.ts

ts
import { Module } from "@nestjs/common";
import { CryptoService } from "./crypto.service";

@Module({
  providers: [CryptoService],
  exports: [CryptoService],
})
export class CryptoModule {}

crypto.service.ts

ts
import { Inject, Injectable } from "@nestjs/common";
// 加密解密模块
import * as CryptoJS from "crypto-js";

import dotenv from "dotenv";
// 加载环境变量
dotenv.config();
@Injectable()
export class CryptoService {
  private key: string;
  private iv: string;
  constructor() {
    this.key = CryptoJS.enc.Utf8.parse(process.env.CRYPTO_KEY);
    this.iv = CryptoJS.enc.Utf8.parse(process.env.CRYPTO_IV);
  }

  // 解密
  aesDecrypt(word) {
    let encryptedHexStr = CryptoJS.enc.Hex.parse(word);
    let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
    let decrypt = CryptoJS.AES.decrypt(srcs, this.key, {
      iv: this.iv,
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7,
    });
    let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
    return decryptedStr.toString();
  }

  // 加密
  aesEncrypt(word) {
    let srcs = CryptoJS.enc.Utf8.parse(word);
    let encrypted = CryptoJS.AES.encrypt(srcs, this.key, {
      iv: this.iv,
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7,
    });
    return encrypted.ciphertext.toString().toUpperCase();
  }

  // md5加密
  md5Encrypt(word: string): string {
    return CryptoJS.MD5(word).toString();
  }
}

其他模块使用

xxxx.module.ts

ts
import { Module } from "@nestjs/common";
import { TestdemoService } from "./testdemo.service";
import { TestdemoController } from "./testdemo.controller";
// 增加加密解密模块
import { CryptoModule } from "../../commonModules/crypto/crypto.module";
@Module({
  imports: [CryptoModule],
  controllers: [
    TestdemoController, // Excel 动态模块
  ],
  providers: [TestdemoService],
})
export class TestdemoModule {}

xxx.service.ts

ts
import { Inject, Injectable } from "@nestjs/common";
// 加密解密
import { CryptoService } from "../../commonModules/crypto/crypto.service";
@Injectable()
export class TestdemoService {
  // 加密解密
  @Inject()
  private readonly cryptoService: CryptoService;

  // aes加密
  async aesEncrypt(data: string) {
    const result = await this.cryptoService.aesEncrypt(data);
    return result;
  }

  // aes解密
  async aesDecrypt(data: string) {
    const result = await this.cryptoService.aesDecrypt(data);
    return result;
  }

  // md5加密
  async md5Encrypt(data: string) {
    const result = await this.cryptoService.md5Encrypt(data);
    return result;
  }
}