HarmonyOS 鸿蒙Next 使用AES对称密钥(CBC模式)加解密,生成symKey失败

发布于 1周前 作者 sinazl 最后一次编辑是 5天前 来自 鸿蒙OS

使用AES对称密钥(CBC模式)加解密,生成symKey失败 已解决 使用官方代码进行AES解密数据,生成symKey失败

传入参数秘钥key:f951cbcc2d3d8f4de802744d8fe6103d 传入参数iv:563b7a6e46394561b9cd6e93564f1632

代码如下:

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

/**
 * AES解密方法
 * @param key 秘钥
 * @param iv
 * @param data 待解密数据
 * @returns
 */
export async function aes128CBC_decrypt(key: string, iv: string, data: ArrayBuffer): Promise<cryptoFramework.DataBlob> {
  let keyData = new Uint8Array(buffer.from(key, 'utf-8').buffer);
  // let keyData = stringToUint8Array(key);
  let length = key.length;
  let symKey = await genSymKeyByData(keyData);
  let decryptData: cryptoFramework.DataBlob = { data: new Uint8Array(data) };
  let decryptDataSuccess = await decryptMessagePromise(symKey, iv, decryptData);
  return decryptDataSuccess;
}

//生成CBC模式的ivParamsSpec
function genIvParamsSpec(iv: string) {
  let dataIv = stringToUint8Array(iv);
  let ivBlob: cryptoFramework.DataBlob = { data: dataIv };
  let ivParamsSpec: cryptoFramework.IvParamsSpec = {
    algName: "IvParamsSpec",
    iv: ivBlob
  };
  return ivParamsSpec;
}

//生成密钥算法为AES、密钥长度为128位的对称密钥(SymKey)
async function genSymKeyByData(symKeyData: Uint8Array) {
  let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData };
  let aesGenerator = cryptoFramework.createSymKeyGenerator('AES128');
  let symKey = await aesGenerator.convertKey(symKeyBlob); //---错误步骤
  console.info('convertKey success');
  return symKey;
}

// 解密消息
async function decryptMessagePromise(symKey: cryptoFramework.SymKey, iv: string, cipherText: cryptoFramework.DataBlob) {
  let decoder = cryptoFramework.createCipher('AES128|CBC|PKCS7');
  let ivParamsSpec = genIvParamsSpec(iv);
  await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, ivParamsSpec);
  let decryptData = await decoder.doFinal(cipherText);
  return decryptData;
}

接口获取服务端返回加密后的二进制数据进行解密,在生成symKey的环节就报错,没有到解密数据环节


更多关于HarmonyOS 鸿蒙Next 使用AES对称密钥(CBC模式)加解密,生成symKey失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复
使用AES对称密钥(CBC模式)加解密

可以参考以下链接:  https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/crypto-aes-sym-encrypt-decrypt-cbc-V5

更多关于HarmonyOS 鸿蒙Next 使用AES对称密钥(CBC模式)加解密,生成symKey失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,使用AES对称密钥(CBC模式)进行加解密时,如果生成symKey失败,通常可能是由于以下几个原因:

  1. 密钥材料无效:确保提供的密钥材料符合AES算法的要求,且未损坏或格式不正确。

  2. 密钥长度不正确:AES支持128位、192位和256位长度的密钥。检查所生成的密钥长度是否符合这些标准。

  3. 初始化向量(IV)问题:虽然IV不是生成symKey的直接因素,但在CBC模式下,IV是必需的。确保IV已正确设置且符合长度要求(通常为16字节)。

  4. 算法或模式配置错误:确认在调用加解密函数时,算法和模式(AES/CBC/PKCS7Padding等)配置正确无误。

  5. 权限或环境限制:检查应用是否拥有执行加密操作的必要权限,以及是否在支持加密的环境中运行。

  6. API使用不当:确保API调用顺序和参数传递正确,遵循HarmonyOS的加密API文档。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部