鸿蒙AES 加解密
const AES256: string = 'AES256';const AES128_CBC_PKCS7: string = 'AES256|CBC|PKCS7'; export class CipherModel {
static stringToUint8Array(source:string){
return new Uint8Array(buffer.from(source, 'utf-8').buffer);
}
static uint8ArrayToString(fileData:Uint8Array):string{
returnbuffer.from(fileData.buffer).toString('utf-8');
}
public staticaesEncrypt(message: string, key: string, iv: string) {
let paramsSpec: cryptoFramework.IvParamsSpec = { iv: { data: CipherModel.stringToUint8Array(iv)}, algName: "IvParamsSpec" }
let aesGenerator = cryptoFramework.createSymKeyGenerator(AES256);
let un8arrykey = new Uint8Array(buffer.from(key, 'utf-8').buffer);
let pubKeyBlob: cryptoFramework.DataBlob = { data: un8arrykey };
aesGenerator.convertKey(pubKeyBlob, (err, symKey) => {
let cipher = cryptoFramework.createCipher(AES128_CBC_PKCS7);
cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, paramsSpec, (err, data) => {
let input: cryptoFramework.DataBlob = { data: CipherModel.stringToUint8Array(message)};
cipher.doFinal(input, (err, data) => {
//let that = new util.Base64Helper();
//let result = that.encodeToStringSync(data.data)
LogUtil.d(TAG, "--------------------------result is " + data.data);
})
})
})
}
public staticaesDecrypt(message: string, key: string, iv: string) {
let paramsSpec: cryptoFramework.IvParamsSpec = { iv: { data: CipherModel.stringToUint8Array(iv)}, algName: "IvParamsSpec" }
let aesGenerator = cryptoFramework.createSymKeyGenerator(AES256);
let cipher = cryptoFramework.createCipher(AES128_CBC_PKCS7);
let pubKeyBlob: cryptoFramework.DataBlob = { data: CipherModel.stringToUint8Array(key) };
aesGenerator.convertKey(pubKeyBlob, (err, symKey) => {
cipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, paramsSpec, (err, data) => {
//let that = new util.Base64Helper();
//let newMessage = that.decodeSync(message);
let input: cryptoFramework.DataBlob = { data: message };
cipher.doFinal(input, (err, data) => {
let result = CipherModel.uint8ArrayToString(data.data)
LogUtil.d(TAG, "result is " + result);
})
})
})
}
}
代码调整后:
export class AESUtil {
//iv ParamsSpec
static genIvParamsSpec(iv:string) {
let dataIv=Utils.stringToUt8Array(iv);
let ivBlob: cryptoFramework.DataBlob = { data: dataIv };
let ivParamsSpec: cryptoFramework.IvParamsSpec = {
algName: "IvParamsSpec",
iv: ivBlob
};
return ivParamsSpec;
}
//key 转 SymKey
static async genSymKeyByData(key: string) {
let aesGenerator = cryptoFramework.createSymKeyGenerator(AES256);
let pubKeyBlob: cryptoFramework.DataBlob = { data: Utils.stringToUt8Array(key) };
let symKey = await aesGenerator.convertKey(pubKeyBlob);
return symKey;
}
//AES 加密 参数
public static async aesEncryptBs64(message: string, key: string, iv: string) {
//key转symKey
let symKey = await AESUtil.genSymKeyByData(key);
//加密
let cipher = cryptoFramework.createCipher(AES128_CBC_PKCS7);
await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, AESUtil.genIvParamsSpec(iv));
let input: cryptoFramework.DataBlob = { data:Utils.stringToUt8Array(message)};
let cryptData = await cipher.doFinal(input);
//对加密值base64编码
let that = new util.Base64Helper();
let result = that.encodeToStringSync(cryptData.data)
return result;
}
//AES 解密 参数
public static async aesDecryptBs64(message: string, key: string, iv: string){
//base 64解密
let that = new util.Base64Helper();
let newMessage = that.decodeSync(message);
//key转symKey
let symKey = await AESUtil.genSymKeyByData(key);
//解密
let cipher = cryptoFramework.createCipher(AES128_CBC_PKCS7);
await cipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, AESUtil.genIvParamsSpec(iv));
let input: cryptoFramework.DataBlob = { data: newMessage };
let cryptData = await cipher.doFinal(input);
//对解密值 转string
let result = Utils.ut8ArrayToString(cryptData.data)
return result
}
}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]