鸿蒙中加密库使用

复制代码
先在oh-package.json5中引用库
"@ohos/crypto-js": "2.0.5"



在创建工具类,供外部调用

// CryptoUtils.ts
import { CryptoJS } from '@ohos/crypto-js';

export class DesEncryptorJS {

  /**
   * DES 加密(ECB + PKCS7)
   * @param data 明文
   * @param keyStr 密钥(会自动补齐 8 位)
   * @returns Base64 加密结果
   */
  static desEncrypt(data: string, keyStr: string): string {
    // DES key 必须 8 字节
    let key = keyStr.padEnd(8, '0');
    let parsedKey = CryptoJS.enc.Utf8.parse(key);

    let encrypted = CryptoJS.DES.encrypt(data, parsedKey, {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7,
    });

    return encrypted.toString();
  }

  /**
   * DES 解密(ECB + PKCS7)
   * @param encryptedData Base64 密文
   * @param keyStr 密钥
   * @returns 明文
   */
  static desDecrypt(encryptedData: string, keyStr: string): string {
    let key = keyStr.padEnd(8, '0');
    let parsedKey = CryptoJS.enc.Utf8.parse(key);

    let decrypted = CryptoJS.DES.decrypt(encryptedData, parsedKey, {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7,
    });

    return decrypted.toString(CryptoJS.enc.Utf8);
  }

  /**
   * AES 加密(默认 ECB + PKCS7)
   * @param data 明文
   * @param keyStr 密钥(16/24/32 字节)
   * @returns Base64 密文
   */
  static aesEncrypt(data: string, keyStr: string): string {
    let key = CryptoJS.enc.Utf8.parse(keyStr);
    let encrypted = CryptoJS.AES.encrypt(data, key, {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7,
    });

    return encrypted.toString();
  }

  /**
   * AES 解密
   * @param encryptedData Base64 密文
   * @param keyStr 密钥
   * @returns 明文
   */
  static aesDecrypt(encryptedData: string, keyStr: string): string {
    let key = CryptoJS.enc.Utf8.parse(keyStr);
    let decrypted = CryptoJS.AES.decrypt(encryptedData, key, {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7,
    });

    return decrypted.toString(CryptoJS.enc.Utf8);
  }

  /**
   * MD5 加密
   * @param data 明文
   * @returns MD5 十六进制字符串
   */
  static md5(data: string): string {
    return CryptoJS.MD5(data).toString(CryptoJS.enc.Hex);
  }
}
相关推荐
斌糖雪梨12 分钟前
spring auth 核心流程详解
java·后端·spring
quantdash_cc16 分钟前
从实时行情到价格观察表:用 Python 和 Pandas 构建策略输入数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
芝麻别开门1 小时前
gst-shark安卓编译使用方法
android·gstreamer·gst-shark
昂好的day1 小时前
VisionMaster 通信模块实战(上):Modbus、TCP 收发、协议组装解析
开发语言·网络·网络协议·tcp/ip·c#
文丑颜不良啊2 小时前
LeetCode201~225题目解析
java·leetcode
努力实干2 小时前
面向对象设计原则——C++
开发语言·c++·数码相机
SL_staff3 小时前
4G设备掉线三层归因指南:SIM卡、模组、JVS-IOT网关配置精准锁定
java·物联网·产品
NetX行者4 小时前
四语言 Hello World 背后:编译模型与运行时对比
开发语言
Wang's Blog4 小时前
Java 项目实战: 交友项目 - 黑名单:取消黑名单
java·windows·交友
Pin_Qing5 小时前
账单没超,请求先被拒了
大数据·开发语言·人工智能