鸿蒙中加密库使用

复制代码
先在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);
  }
}
相关推荐
w_zero_one3 分钟前
链表(2)
java·数据结构·链表
白杨尚青10 分钟前
C++入门篇(十一):string(中)——容量与增删改查:一篇吃透所有常用接口(万字详解)
java·开发语言·c++
老歌老听老掉牙11 分钟前
旅行商问题:从数学模型到 Python 实战
开发语言·python
CC数分12 分钟前
数据可视化入门:用Python把一堆数字变成一张图
开发语言·python·信息可视化·数据分析
java_nnnn12 分钟前
JavaEE进阶-JavaScript初识
开发语言·前端·javascript·java-ee·ecmascript
SimonKing21 分钟前
SSE、WebSocket 连接丢 Redis 里?那可踩大坑了!
java·后端·程序员
倔强的石头10625 分钟前
【Linux指南】动静态库系列(九):动态库如何进入进程地址空间:从磁盘 .so 到共享内存映射
java·linux·服务器
YYYing.30 分钟前
【设计模式系列 (五) 】原型模式
开发语言·后端·设计模式·原型模式·c/c++
脚踏实地,坚持不懈!31 分钟前
Linux 内核源码解析:从 secondary_startup_64 到 pick_eevdf 的完整调用栈分析
android·linux·arm开发
TeamDev32 分钟前
JxBrowser 9.5.2 版本发布啦!
java·前端·windows·chromium·混合应用·jxbrowser·浏览器控件