HarmonyOS 鸿蒙Next AES cbc 加解密直接运行api中的demo报解密失败
HarmonyOS 鸿蒙Next AES cbc 加解密直接运行api中的demo报解密失败
function generateRandom(len: number) {
  let rand = cryptoFramework.createRandom();
  let generateRandSync = rand.generateRandomSync(len);
  return generateRandSync;
}
function genIvParamsSpec() {
  let ivBlob = generateRandom(16);
  let ivParamsSpec: cryptoFramework.IvParamsSpec = {
    algName: “IvParamsSpec”,
    iv: ivBlob
  };
  return ivParamsSpec;
}
let iv = genIvParamsSpec();
// 加密消息
function encryptMessage(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) {
  let cipher = cryptoFramework.createCipher(‘AES128|CBC|PKCS7’);
  cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, iv);
  let cipherData = cipher.doFinalSync(plainText);
  return cipherData;
}
// 解密消息
function decryptMessage(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) {
  let decoder = cryptoFramework.createCipher(‘AES128|CBC|PKCS7’);
  decoder.initSync(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, iv);
  let decryptData = decoder.doFinalSync(cipherText);
  decryptData = decoder.updateSync(cipherText);
  return decryptData;
}
function genSymKeyByData(symKeyData: Uint8Array) {
  let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData };
  let aesGenerator = cryptoFramework.createSymKeyGenerator(‘AES128’);
  let symKey = aesGenerator.convertKeySync(symKeyBlob);
  console.info(‘convertKeySync success’);
  return symKey;
}    export function main() {
  try {
    let keyData = new Uint8Array([83, 217, 231, 76, 28, 113, 23, 219, 250, 71, 209, 210, 205, 97, 32, 159]);
    let symKey = genSymKeyByData(keyData);
    let message = “This is a test”;
    let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, ‘utf-8’).buffer) };
    let encryptText = encryptMessage(symKey, plainText);
    let decryptText = decryptMessage(symKey, encryptText);
    if (plainText.data.toString() === decryptText.data.toString()) {
      console.info(‘decrypt ok’);
      console.info('decrypt plainText: ’ + buffer.from(decryptText.data).toString(‘utf-8’));
    } else {
      console.error(‘decrypt failed’);
    }
  } catch (error) {
    console.error(AES CBC “${error}“, error code: ${error.code});
  }
}
    一直输出 decrypt failed 。请问是哪里的问题
更多关于HarmonyOS 鸿蒙Next AES cbc 加解密直接运行api中的demo报解密失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html
if (plainText.data.toString() === decryptText.data.toString()) {
      console.info('decrypt ok');
      console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8'));
    } else {
      console.error('decrypt failed');
    }   在这里报错,可以debug下代码具体看下
更多关于HarmonyOS 鸿蒙Next AES cbc 加解密直接运行api中的demo报解密失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
这里没报错,就是单纯的不相等。 我后面观察到加密后encryptText.data 为【0,0,0】 。明显这里来了已经不对了,你可以直接复制那段代码运行下看看。地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/crypto-aes-sym-encrypt-decrypt-cbc-V5
补充下:使用真机测,运行成功。 之前使用的是 单元测试功能
真机可以测试成功就好
针对您提到的HarmonyOS鸿蒙Next AES CBC加解密直接运行API中的Demo报解密失败的问题,这通常可能由以下几个原因引起:
- 
密钥或初始向量(IV)不匹配:请确保加密和解密时使用的密钥和IV完全一致。任何微小的差异都会导致解密失败。
 - 
填充模式不一致:AES加密通常使用某种填充模式来处理数据块大小不匹配的问题。如果加密时使用了某种填充模式(如PKCS7),解密时也必须使用相同的填充模式。
 - 
数据损坏:在传输或存储过程中,加密数据可能被意外修改或损坏,导致解密失败。
 - 
API使用错误:检查Demo代码,确保API的使用符合文档要求,包括参数传递、调用顺序等。
 - 
环境差异:不同设备或开发环境可能影响加密库的行为。确保测试环境与生产环境一致。
 
建议逐一排查上述可能原因,并对照官方文档仔细核对代码。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。
        
      
                  
                  
                  
