HarmonyOS 鸿蒙Next AES128加密失败问题

发布于 1周前 作者 vueper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next AES128加密失败问题

import cryptoFramework from '@ohos.security.cryptoFramework';
import { BusinessError } from '@kit.BasicServicesKit';
import { util } from '@kit.ArkTS';

function stringToArray(str: string): Uint8Array {
  let textEncoder = new util.TextEncoder();
  return textEncoder.encodeInto(str);
}

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

  async onData(str: string, iv: string){
    let cipherAlgName = 'AES128|CBC|PKCS5';
    try {
      let cipher = cryptoFramework.createCipher(cipherAlgName);
      let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
      console.info('cipher algName:' + cipher.algName);
      let keyMaterial = new Uint8Array(stringToArray('LxamphMX2OpWNPZm'));
      try {
        let symKey = await symKeyGenerator.convertKey({
          data: keyMaterial
        });
        let ivParamsSpec = null;
        if (iv !== '') {
          // let ivData = {
          //   data: new Uint8Array(stringToArray(iv))
          // };
          // ivParamsSpec [''] = 'IvParamsSpec';
          // ivParamsSpec[iv] = ivData;
        }
        await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, ivParamsSpec);
        let res = await cipher.doFinal({
          data: new Uint8Array(stringToArray(str))
        });
        // return YumpUtil.uint8ArrayToBase64String(res.data);
        console.log('res.data>>23', JSON.stringify(res.data))
      } catch(error){
        console.log(`error:onData${JSON.stringify(error)}`);
      }
    } catch (error) {
      let e: BusinessError = error as BusinessError;
      console.error(`sync error, ${e.code}, ${e.message}`);
    }
  }

  build() {
    RelativeContainer() {
      Button('onData').onClick(() =>{
        this.onData('12369', '');
      })
      Text(this.message)
        .id('HelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
    }
    .height('100%')
    .width('100%')
  }
}

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

2 回复

参考以下demo:

import cryptoFramework from '@ohos.security.cryptoFramework';
import { BusinessError } from '@kit.BasicServicesKit';
import { util } from '@kit.ArkTS';

function stringToArray(str: string): Uint8Array {
  let textEncoder = new util.TextEncoder();
  return textEncoder.encodeInto(str);
}

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  // LxamphMX2OpWNPZm
  async onData(str: string, iv: string){
    let cipherAlgName = 'AES128|CBC|PKCS5';
    try {
      let cipher = cryptoFramework.createCipher(cipherAlgName);
      let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
      console.info('cipher algName:' + cipher.algName);
      let keyMaterial = new Uint8Array(stringToArray('LxamphMX2OpWNPZm'));
      try {
        let symKey = await symKeyGenerator.convertKey({
          data: keyMaterial
        });
        let ivParamsSpec = null;
        if (iv !== '') {
          // let ivData = {
          //   data: new Uint8Array(stringToArray(iv))
          // };
          // ivParamsSpec [''] = 'IvParamsSpec';
          // ivParamsSpec[iv] = ivData;
        }
        await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, ivParamsSpec);
        let res = await cipher.doFinal({
          data: new Uint8Array(stringToArray(str))
        });
        // return YumpUtil.uint8ArrayToBase64String(res.data);
        console.log('res.data>>23', JSON.stringify(res.data))
      } catch(error){
        console.log(`error:onData${JSON.stringify(error)}`);
      }
    } catch (error) {
      let e: BusinessError = error as BusinessError;
      console.error(`sync error, ${e.code}, ${e.message}`);
    }
  }

  build() {
    RelativeContainer() {
      Button('onData').onClick(() =>{
        this.onData('12369', '');
      })
      Text(this.message)
        .id('HelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
    }
    .height('100%')
    .width('100%')
  }
}

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


针对HarmonyOS鸿蒙Next AES128加密失败的问题,可能的原因及解决方案如下:

  1. 密钥管理不当

    • 确认加密密钥是否正确生成和存储。在鸿蒙系统中,密钥的管理应遵循系统的安全规范,确保密钥在生成、存储和使用过程中不被泄露或篡改。
  2. 加密模式或填充方式错误

    • 检查加密模式(如CBC、ECB等)和填充方式(如PKCS7、NoPadding等)是否与解密时一致。不同的加密模式和填充方式会导致加密结果不兼容。
  3. 初始化向量(IV)问题

    • 如果使用需要IV的加密模式(如CBC),确保IV在加密和解密时相同且随机生成。IV的重复使用会降低加密的安全性。
  4. 数据格式问题

    • 确认待加密数据的格式是否符合加密算法的要求。例如,某些算法可能要求数据以特定字节数对齐。
  5. 库或API使用错误

    • 检查使用的加密库或API是否正确调用,参数设置是否合理。鸿蒙系统提供了丰富的加密API,但错误的使用方式可能导致加密失败。

如果以上检查均无误,但问题依旧存在,请联系官网客服。官网地址是:https://www.itying.com/category-93-b0.html 他们会提供更专业的技术支持和解决方案。

回到顶部