HarmonyOS 进行加密压测出现崩溃?

import { cryptoFramework } from '@kit.CryptoArchitectureKit';

// 用这个库执行以下代码压测加密出现崩溃
async rpaCrypt(isEncrypt: boolean, data: Uint8Array): Promise<Uint8Array> {
  // 生成加解密生成器
  if (isEncrypt) {
    for (let i = 0; i < 100000; i++) {
      let cipherAlgName = 'AES128|GCM|NoPadding';
      let mode = isEncrypt ? cryptoFramework.CryptoMode.ENCRYPT_MODE : cryptoFramework.CryptoMode.DECRYPT_MODE;
      let globalGcmParams = this.genGcmParamsSpec(this.rpaIv!, this.rpaAad);
      let cipher = cryptoFramework.createCipher(cipherAlgName);
      cipher!.init(mode, this.rpaCipher, globalGcmParams);
      LogUtils.d(this.Tag, 'Encrypt data:' + VKeyUtils.uint8ArrayToHexString(data));
      LogUtils.d(this.Tag, 'Encrypt authTag:' + VKeyUtils.uint8ArrayToHexString(this.authTag));
      let encryptUpdate = await cipher!.update({ data: data });
      console.log(i + '======')
      let authTag = await cipher!.doFinal(null)
      this.authTag = authTag.data
    }
  }
  return new Uint8Array()
}
阅读 508
1 个回答

先规范变量使用方法this.authTag与let authTag可能会产生作用域问题,可参考使用官方代码示例:

try {
  let cipherAlgName = 'AES128|GCM|NoPadding';
  let symAlgName = 'AES128';
  let globalCipher = cryptoFramework.createCipher(cipherAlgName);
  let symKeyGenerator = cryptoFramework.createSymKeyGenerator(symAlgName);
  let keyBlob: cryptoFramework.DataBlob = { data: key }
  let promiseSymKey = await symKeyGenerator.convertKey(keyBlob)
  gcmParamsSpec.iv = { data: iv } //12~16位
  await globalCipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, promiseSymKey, gcmParamsSpec);
  let result = await globalCipher.update({ data: text })
  gcmParamsSpec.authTag = await globalCipher.doFinal(null)
  globalResult = uint8ArrayToHexStr(result.data)
  console.log("globalResult HEX=>" + globalResult)
  console.log("globalResult BASE=>" + base.encodeToStringSync(result.data))
} catch (err) {
  console.log(err.message)
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进