鸿蒙中加密库使用

复制代码
先在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);
  }
}
相关推荐
一灯架构1 小时前
90%的人答错!一文带你彻底搞懂ArrayList
java·后端
踏着七彩祥云的小丑1 小时前
pytest——Mark标记
开发语言·python·pytest
Dream of maid2 小时前
Python12(网络编程)
开发语言·网络·php
W23035765732 小时前
经典算法:最长上升子序列(LIS)深度解析 C++ 实现
开发语言·c++·算法
Y4090012 小时前
【多线程】线程安全(1)
java·开发语言·jvm
不爱吃炸鸡柳3 小时前
Python入门第一课:零基础认识Python + 环境搭建 + 基础语法精讲
开发语言·python
布局呆星3 小时前
SpringBoot 基础入门
java·spring boot·spring
minji...3 小时前
Linux 线程同步与互斥(三) 生产者消费者模型,基于阻塞队列的生产者消费者模型的代码实现
linux·运维·服务器·开发语言·网络·c++·算法
Dxy12393102163 小时前
Python基于BERT的上下文纠错详解
开发语言·python·bert
风吹迎面入袖凉3 小时前
【Redis】Redisson的可重入锁原理
java·redis