代码如下:
/**
* key:8cde79aa8651f8e4
* data:oMXKoLLGploX7RNypkcEfIzvHI6TtX35FQ1IIpNiMdJvisN1MULSXOdvtfM7fVsQEqPh_VNaur8z8Oh1ROh9SfOi7FGwgQ3GH9b9l_NERPCmyVI2BBRsQZzZD5Y74upT4yBLMVfKJ-14ExiQY0F7xrKOTERO6d-Bop9_wcVH1SPOAQnJOcAjYJebd_N5crBtlz3UZmXeqmsocrwuFkXuYFHX9mjkcRhi2BwrektP9g6UKp_big7yi9kTVyB8SLQ4tauPEaGN_q0leHvn01q3xF_IXJhkjvV-XIedyyB2gmBFJBrhRRQZweoSBl142HPvZeTONl0qSgawefxZ6w36mmDPOHZbRhxXvdOGgKs6ri60YBEa9mqK-BwshqlQqlkCCWWMweuGIdqWlqIFk14EIrCbfsfNmF8fkPvbZkk2B0hyHD_SKFTpHTigYBRPHPI-UAX3u-K7UZ5XU3O4UnkQYA
* iv:0821f39fdd2b7135
*/
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { ConvertUtil } from './ConvertUtil';
export class AESUtil {
public static async decryptWithKeyBase64(data: string, iv: string, key: string) {
let symKey = await AESUtil.genSymKeyByData(ConvertUtil.stringToUint8Array(key));
let decoder = cryptoFramework.createCipher('AES128|CBC|PKCS7');
let symIv = AESUtil.genIvParamsSpec(iv);
await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, symIv);
let decryptData = decoder.doFinal({ data: ConvertUtil.stringToUint8Array(data) });
return decryptData;
}
static genIvParamsSpec(iv: string) {
let dataIv = ConvertUtil.stringToUint8Array(iv);
let ivBlob: cryptoFramework.DataBlob = { data: dataIv };
let ivParamsSpec: cryptoFramework.IvParamsSpec = {
algName: "IvParamsSpec",
iv: ivBlob
};
return ivParamsSpec;
}
static async genSymKeyByData(symKeyData: Uint8Array) {
let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData };
let aesGenerator = cryptoFramework.createSymKeyGenerator('AES128');
let symKey = aesGenerator.convertKeySync(symKeyBlob);
console.info('convertKey success');
return symKey;
}
}
public static stringToUint8Array(str: string) {
return new Uint8Array(buffer.from(str, 'utf-8').buffer)
}
使用提供的密文并不为base64这里转码失败
这里使用iv和密钥HarmonyOS 本地的加解密都是成功的,示例参考如下: