HarmonyOS 鸿蒙Next 使用AES对称密钥(CBC模式)加解密,生成symKey失败
使用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
更多关于HarmonyOS 鸿蒙Next 使用AES对称密钥(CBC模式)加解密,生成symKey失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next系统中,使用AES对称密钥(CBC模式)进行加解密时,如果生成symKey失败,通常可能是由于以下几个原因:
-
密钥材料无效:确保提供的密钥材料符合AES算法的要求,且未损坏或格式不正确。
-
密钥长度不正确:AES支持128位、192位和256位长度的密钥。检查所生成的密钥长度是否符合这些标准。
-
初始化向量(IV)问题:虽然IV不是生成symKey的直接因素,但在CBC模式下,IV是必需的。确保IV已正确设置且符合长度要求(通常为16字节)。
-
算法或模式配置错误:确认在调用加解密函数时,算法和模式(AES/CBC/PKCS7Padding等)配置正确无误。
-
权限或环境限制:检查应用是否拥有执行加密操作的必要权限,以及是否在支持加密的环境中运行。
-
API使用不当:确保API调用顺序和参数传递正确,遵循HarmonyOS的加密API文档。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。