鸿蒙中加密库使用

复制代码
先在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);
  }
}
相关推荐
认真的酒窝3 小时前
自己动手开发编译器(十一)语义分析
java·开发语言
wbs_scy4 小时前
Linux C++ 高并发编程:线程池全链路深度解析,从原理到手撕实现
java·开发语言
JAVA面经实录9174 小时前
Linux 常用命令完整知识体系
java·linux·开发语言·汇编
贪玩的蛋挞5 小时前
C#与闭包
开发语言·c#
端庄的战斗机5 小时前
javascript 设计模式(文章很长,请自备瓜子,水果和眼药水)
开发语言·javascript·设计模式
Full Stack Developme6 小时前
Java LRU 与 LFU 算法及应用
java·开发语言·算法
C语言小火车7 小时前
C++ 堆排序深度精讲:基于完全二叉树的选择排序进化,最坏情况 O(n log n) 的稳定王者
开发语言·c++·算法·排序算法·堆排序
机智的张尼玛7 小时前
我基于 Kotlin Multiplatform 实现了一套跨平台的弱网离线同步引擎
android·开源·kotlin
北冥you鱼7 小时前
abigen 最佳实践:从入门到精通,高效生成 Go 语言合约绑定
开发语言·golang·区块链
程序员老油条8 小时前
WSL2 + Docker Desktop:Windows 下的完美 Java 开发环境
java·windows·docker·wsl2