HarmonyOS鸿蒙Next中aes解密

HarmonyOS鸿蒙Next中aes解密 下面是java的解密方法 encryptBytes 是jbase64解密的字符串,decryptKey是key,但是这个在 鸿蒙中如何使用aes解密?

private static String aesDecryptByBytes(byte[] encryptBytes, String decryptKey ) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
    KeyGenerator kgen = KeyGenerator.getInstance("AES");
    kgen.init(128);
    Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
    cipher.init(2, new SecretKeySpec(decryptKey.getBytes(), "AES"));
    byte[] decryptBytes = cipher.doFinal(encryptBytes);
    return new String(decryptBytes);
}

更多关于HarmonyOS鸿蒙Next中aes解密的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

参考下demo:

import cryptoFramework from '@ohos.security.cryptoFramework';
import buffer from '@ohos.buffer';
import { util } from '@kit.ArkTS';
import { promptAction } from '@kit.ArkUI';

export const base64Util = new util.Base64Helper();

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';

  build() {
    Column() {
      Button('点击解密').onClick(async () => {
        let mes = await base64Util.decodeSync("bGc9apA8nSxuRV2hh6kV9aHGNdRgnURSAazK9Intipc=");
        let str = await aesDecryptECB(mes, StringToUint8Array("KgCzT5a3t391fWqa"));
        console.log(`解密result:${str}`)
        promptAction.showToast({ message: `${str}`, duration: 5000 })
      })

      Button('点击加密').onClick(async () => {
        let str = await aesEncryptECB(StringToUint8Array('Shangqingkuang123Lx'), StringToUint8Array("KgCzT5a3t391fWqa"));
        promptAction.showToast({ message: `${str}`, duration: 5000 })
      })
    }.width('100%').height('100%').justifyContent(FlexAlign.Center)
  }
}

export async function aesEncryptECB(text: Uint8Array, key: Uint8Array) {
  let globalResult = ""
  try {
    let cipherAlgName = 'AES128|ECB|PKCS5';
    let globalCipher = cryptoFramework.createCipher(cipherAlgName);
    let symAlgName = 'AES128';
    let symKeyGenerator = cryptoFramework.createSymKeyGenerator(symAlgName);
    let keyBlob: cryptoFramework.DataBlob = { data: key }
    let promiseSymKey = await symKeyGenerator.convertKey(keyBlob)
    await globalCipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, promiseSymKey, null);
    let plainText: cryptoFramework.DataBlob = { data: text }
    let result = await globalCipher.doFinal(plainText)
    let str = Uint8ArrayToHexStr(result.data)
    console.log("加密后的密文==》" + str) //再解密验证
    aesDecryptECB(HexStrTouint8Array(str), StringToUint8Array("KgCzT5a3t391fWqa"))
  } catch (e) {
    console.log(e.message)
  }
  return globalResult;
}

export async function aesDecryptECB(text: Uint8Array, key: Uint8Array) {
  let globalResult = ""
  try {
    let cipherAlgName = 'AES128|ECB|PKCS5';
    let globalCipher = cryptoFramework.createCipher(cipherAlgName);
    let symAlgName = 'AES128';
    let symKeyGenerator = cryptoFramework.createSymKeyGenerator(symAlgName);
    let keyBlob: cryptoFramework.DataBlob = { data: key }
    let promiseSymKey = await symKeyGenerator.convertKey(keyBlob)
    await globalCipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, promiseSymKey, null);
    let plainText: cryptoFramework.DataBlob = { data: text }
    let result = await globalCipher.doFinal(plainText)
    globalResult = uint8ArrayToString(result.data);
    console.log("解密后的明文==》" + globalResult)
  } catch (err) {
    console.log(err.message)
  }
  return globalResult;
}

export function uint8ArrayToString(input: Uint8Array) {
  let textDecoder = util.TextDecoder.create('utf-8');
  return textDecoder.decodeWithStream(input);
} //十六进制转Uint8Array

export function HexStrTouint8Array(data: string): Uint8Array {
  return new Uint8Array(buffer.from(data, 'hex').buffer);
}

export function Uint8ArrayToHexStr(data: Uint8Array): string {
  return buffer.from(data).toString('hex')
}

export function StringToUint8Array(str: String) {
  let arr: number[] = new Array();
  for (let i = 0, j = str.length; i < j; ++i) {
    arr.push(str.charCodeAt(i));
  }
  return new Uint8Array(arr);
}

更多关于HarmonyOS鸿蒙Next中aes解密的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,AES解密可以通过使用HUKS(Huawei Universal Keystore Service)模块来实现。HUKS提供了密钥管理功能,支持包括AES在内的多种加密算法。具体步骤包括:

  1. 初始化HUKS模块:首先需要初始化HUKS,使用HuksInitParamSet进行参数配置,指定算法类型为AES。
  2. 生成或导入密钥:如果已有密钥,可以通过HuksImportKey导入;如果需要生成密钥,使用HuksGenerateKey
  3. 设置解密参数:使用HuksDecryptParamSet配置解密参数,包括模式(如CBC、ECB等)、填充方式(如PKCS7)、IV(初始化向量)等。
  4. 执行解密操作:调用HuksDecrypt函数,传入密文和配置好的参数,执行解密操作。
  5. 获取解密结果:解密完成后,HuksDecrypt会返回解密后的明文。

需要注意的是,HUKS模块的使用需要遵循鸿蒙系统的安全规范,确保密钥的安全存储和管理。例如,密钥可以存储在安全芯片中,防止被恶意软件窃取。

此外,鸿蒙系统还提供了CryptoFramework,支持更高级的加密操作,包括AES解密。CryptoFramework提供了Cipher类,可以通过createCipher方法创建AES解密实例,然后使用initupdatedoFinal方法进行解密操作。

总结来说,鸿蒙Next中AES解密的实现主要依赖于HUKSCryptoFramework模块,开发者可以根据具体需求选择合适的API进行开发。

在HarmonyOS鸿蒙Next中进行AES解密,可以使用javax.crypto.Cipher类。首先,确保已导入必要的加密库。以下是基本步骤:

  1. 初始化Cipher:使用Cipher.getInstance("AES")获取Cipher实例,并设置为解密模式。
  2. 配置密钥:使用SecretKeySpec创建AES密钥。
  3. 执行解密:调用cipher.doFinal(encryptedData)进行解密。

示例代码如下:

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

public String decryptAES(byte[] encryptedData, byte[] key) throws Exception {
    SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.DECRYPT_MODE, secretKey);
    return new String(cipher.doFinal(encryptedData));
}

确保密钥和加密模式与加密时一致。

回到顶部