HarmonyOS @ohos.security.cryptoFramework使用cipher解密失败

加密内容为长度为12个字符长度时,使用cipher解密:const output = await cipher.doFinal(null); 这一步会被 catch,没有error信息。

例子:使用testContent1进行cipher加密,字符长度为12,key为AES256类型,加密解密都可以。

const testContent1 = "aaa_bbb_ccc_"; 

加密后的数据:19D2CF481514BA7C3D08F80D5A8960C35AD01F54DEEC6453AF9B42538FEECF96使用testContent2进行cipher加密,字符长度为16,key为AES256类型,加密可以,解密被catch没有错误信息。

const testContent2 = "aaa_bbb_ccc_ddd_"; 

加密后的数据: 203A2C904532ED37C1F25958895E901B8972477F03049230298ED9FCB2F9CCA7

// 解密代码
const AES256 = 'AES256';
const AES_CBC_INIT = 'AES|CBC|PKCS5';
const IV_PARAMETER_LENGTH = 32;
try {
  let symKeyGenerator = cryptoFramework.createSymKeyGenerator(AES256);
  let skeySpec = await symKeyGenerator.convertKey({ data: aesKey });
  let cipher = cryptoFramework.createCipher(AES_CBC_INIT);
  let ivParameter = content.substring(0, IV_PARAMETER_LENGTH);
  const ivparam: cryptoFramework.IvParamsSpec = {
    algName: "IvParamsSpec",
    iv: {
      data: parseHexStr2Byte(ivParameter)
    }
  };
  await cipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, skeySpec, ivparam);
  await cipher.update({
    data: parseHexStr2Byte(content.substring(IV_PARAMETER_LENGTH))
  });
  const output = await cipher.doFinal(null);
  const ciphertextBytes = output.data;
  return bufferToString(ciphertextBytes);
} catch (e) {
  LogUtil.error(e);
}
HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
shlp

代码使用错误,使用update之后自己做完dofinal需要将所有的结果拼接起来得到最后的结果,如果数据量较少,建议不使用update直接使用dofinal。这个地方报错是因为使用update解密后正好解密完dofinal里面没有结果导致对空数据做解密。

分享
微博
QQ
微信
回复
1天前
相关问题
import asset from '@ohos.security.asset'报错
2197浏览 • 1回复 待解决
HarmonyOS 使用DES解密,转换 smkey失败
507浏览 • 1回复 待解决
cryptoFramework.Md update 失败报错
1830浏览 • 1回复 待解决
des解密同步方法解密失败
220浏览 • 1回复 待解决
HarmonyOS 3des加解密失败
24浏览 • 1回复 待解决
HarmonyOS解密算法如何使用
66浏览 • 1回复 待解决
HarmonyOS @ohos/protobufjs 使用咨询
535浏览 • 1回复 待解决
HarmonyOS @ohos/pulltorefresh使用问题
38浏览 • 1回复 待解决