一.代码封装工具类 全部代码
// import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { buffer, util } from '@kit.ArkTS';
export const base = new util.Base64Helper();
export class AESUtils {
// 加密消息
async encryptMessage(KeyData: string,ivData: string, plainText: cryptoFramework.DataBlob) {
let symKey=await this.genSymKeyByData(new Uint8Array(buffer.from(KeyData).buffer))
let ivParamsSpec= this.genIvParamsSpec(ivData)
let cipher = cryptoFramework.createCipher('AES128|CBC|PKCS7');
cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, ivParamsSpec);
let cipherData = cipher.doFinalSync(plainText);
return buffer.from(cipherData.data).toString('utf-8');
}
// 解密消息
async decryptMessage(KeyData: string,ivData: string, cipherText:string) {
let symKey=await this.genSymKeyByData(new Uint8Array(buffer.from(KeyData).buffer))
let ivParamsSpec= this.genIvParamsSpec(ivData)
let plainData: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(cipherText, 'base64').buffer) };
let decoder = cryptoFramework.createCipher('AES128|CBC|PKCS7');
decoder.initSync(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, ivParamsSpec);
let decryptData = decoder.doFinalSync(plainData);
return buffer.from(decryptData.data).toString('utf-8');
}
async 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;
}
genIvParamsSpec(iv:string) {
let dataIv = new Uint8Array(buffer.from(iv).buffer);
let ivBlob: cryptoFramework.DataBlob = { data: dataIv };
let ivParamsSpec: cryptoFramework.IvParamsSpec = {
algName: "IvParamsSpec",
iv: ivBlob
};
return ivParamsSpec;
}
}
二.调用
第一个值为加解密的key,iv有则传,最后一个为需要加解密的东西
//解密
new AESUtils().decryptMessage(key,iv,str).then((res)=>{
const arr = res.split('&').filter(item => item !== 'ctidfem');
PreferencesUtils.saveStringData('decodeidCard',arr[1])
PreferencesUtils.saveStringData('decodePhone',arr[2])
})