HarmonyOS鸿蒙Next中可不可以提供一下AES128加密和sm3国密加解密的方法

HarmonyOS鸿蒙Next中可不可以提供一下AES128加密和sm3国密加解密的方法 目前项目需求有AES128加密和sm3国密加解密的需求,有没有相关文档或者方法!

3 回复

AES128加解密参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/crypto-aes-sym-encrypt-decrypt-gcm-V5

sm3加密,可以参考以下代码,也可以参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/crypto-sm2-asym-encrypt-decrypt-V5

import cryptoFramework from '@ohos.security.cryptoFramework';

import { BusinessError } from '@ohos.base';

import util from '@ohos.util';

import buffer from '@ohos.buffer';

function stringToUint8Array(str: string) {
  return new Uint8Array(buffer.from(str, 'utf-8').buffer);
}

let base64 = new util.Base64Helper(); // 以Promise方式完成摘要

function doMdByPromise() {
  // 摘要算法名称。
  let mdAlgName = "SM3";
  // 要进行摘要的数据。
  let message = "Hello,中国";

  let md = cryptoFramework.createMd(mdAlgName);
  console.info("[Promise]: Md algName is: " + md.algName);

  let promiseMdUpdate = md.update({ data: stringToUint8Array(message) });

  return promiseMdUpdate.then(() => {
    // 调用 digest() 以返回结果。
    let PromiseMdDigest = md.digest();
    return PromiseMdDigest;
  }).then(digestOutput => {
    let mdOutput = digestOutput.data;
    let str2 = base64.encodeToStringSync(mdOutput);
    let str = uint8ArrayToHexStr(mdOutput)
    console.info("[Promise]: MD result: " + mdOutput);
    let mdLen = md.getMdLength();
    console.info("[Promise]: MD len: " + mdLen);
  }).catch((error: BusinessError) => {
    console.error("[Promise]: error: " + error.message);
  });
}

function uint8ArrayToHexStr(data: Uint8Array): string {
  let hexString = "";
  let i: number;
  for (i = 0; i < data.length; i++) {
    let char = ('00' + data[i].toString(16)).slice(-2);
    hexString += char;
  }
  return hexString;
}
import cryptoFramework from '@ohos.security.cryptoFramework';

import { BusinessError, Callback } from '@ohos.base';

import util from '@ohos.util';

import buffer from '@ohos.buffer';

// xxx.ets

@Entry
@Component
struct ListItemExample {
  private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  build() {
    Column() {
      Text("11111111").onClick(() =>{
        doMdByPromise().then((str)=>{
          console.log(str+"--------")
        })
      })
    }.width('100%').height('100%').backgroundColor(0xDCDCDC).padding({ top: 5 })
  }
}

function stringToUint8Array(str: string) {
  return new Uint8Array(buffer.from(str, 'utf-8').buffer);
}

let base64 = new util.Base64Helper(); // 以Promise方式完成摘要

function doMdByPromise() {
  let s = ""
  // 摘要算法名称。
  let mdAlgName = "SM3";
  // 要进行摘要的数据。
  let message = "Hello,中国";

  let md = cryptoFramework.createMd(mdAlgName);
  console.info("[Promise]: Md algName is: " + md.algName);

  let promiseMdUpdate = md.update({ data: stringToUint8Array(message) });

  return promiseMdUpdate.then(() => {
    // 调用 digest() 以返回结果。
    let PromiseMdDigest = md.digest();
    return PromiseMdDigest;
  }).then(digestOutput => {
    let mdOutput = digestOutput.data;
    let str2 = base64.encodeToStringSync(mdOutput);
    let str = uint8ArrayToHexStr(mdOutput)
    console.info("[Promise]: MD result: " + mdOutput);
    let mdLen = md.getMdLength();
    console.info("[Promise]: MD len: " + mdLen);
    return str
  }).catch((error: BusinessError) => {
    console.error("[Promise]: error: " + error.message);
  });
}

function uint8ArrayToHexStr(data: Uint8Array): string {
  let hexString = "";
  let i: number;
  for (i = 0; i < data.length; i++) {
    let char = ('00' + data[i].toString(16)).slice(-2);
    hexString += char;
  }
  return hexString;
}

更多关于HarmonyOS鸿蒙Next中可不可以提供一下AES128加密和sm3国密加解密的方法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,AES128加密和SM3国密加解密可以通过系统提供的加密库来实现。HarmonyOS提供了ohos.security.crypto模块,支持多种加密算法,包括AES和SM3。

对于AES128加密,可以使用cryptoFramework模块中的Aes类。示例代码如下:

import cryptoFramework from '@ohos.security.cryptoFramework';

let aes = cryptoFramework.createAes('AES128|CBC|PKCS7');
let key = new Uint8Array([...]); // 128-bit key
let iv = new Uint8Array([...]);  // Initialization vector

aes.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, key, iv)
    .then(() => {
        return aes.update(new Uint8Array([...])); // Data to encrypt
    })
    .then((encryptedData) => {
        console.log('Encrypted data:', encryptedData);
    });

对于SM3国密加解密,可以使用cryptoFramework模块中的Sm3类。示例代码如下:

import cryptoFramework from '@ohos.security.cryptoFramework';

let sm3 = cryptoFramework.createSm3();
let data = new Uint8Array([...]); // Data to hash

sm3.update(data)
    .then(() => {
        return sm3.doFinal();
    })
    .then((hash) => {
        console.log('SM3 hash:', hash);
    });

这些方法可以直接在HarmonyOS鸿蒙Next应用中使用,无需依赖Java或C语言。

在HarmonyOS鸿蒙Next中,可以使用javax.crypto包实现AES128加密,通过Cipher类进行加解密操作。对于SM3国密算法,可以使用org.bouncycastle库中的SM3Digest类进行哈希计算。具体实现需引入相关库并配置密钥和初始化向量(IV)。以下为简单示例:

// AES128 加密
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
byte[] encrypted = cipher.doFinal(data);

// SM3 哈希
SM3Digest digest = new SM3Digest();
digest.update(data, 0, data.length);
byte[] hash = new byte[digest.getDigestSize()];
digest.doFinal(hash, 0);

需确保引入BouncyCastle库以支持SM3算法。

回到顶部