鸿蒙AES 加解密

圆咕噜咕噜  金牌会员 | 2025-2-12 17:49:16 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 892|帖子 892|积分 2676

  1. const AES256: string = 'AES256';
  2. const AES128_CBC_PKCS7: string = 'AES256|CBC|PKCS7';
复制代码
  1. export class CipherModel {
  2.   static stringToUint8Array(source:string){
  3.     return new Uint8Array(buffer.from(source, 'utf-8').buffer);
  4.   }
  5.   static uint8ArrayToString(fileData:Uint8Array):string{
  6.     return  buffer.from(fileData.buffer).toString('utf-8');
  7.   }
  8.   public static  aesEncrypt(message: string, key: string, iv: string) {
  9.     let paramsSpec: cryptoFramework.IvParamsSpec = { iv: { data: CipherModel.stringToUint8Array(iv)}, algName: "IvParamsSpec" }
  10.     let aesGenerator = cryptoFramework.createSymKeyGenerator(AES256);
  11.     let un8arrykey = new Uint8Array(buffer.from(key, 'utf-8').buffer);
  12.     let pubKeyBlob: cryptoFramework.DataBlob = { data: un8arrykey };
  13.     aesGenerator.convertKey(pubKeyBlob, (err, symKey) => {
  14.       let cipher = cryptoFramework.createCipher(AES128_CBC_PKCS7);
  15.       cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, paramsSpec, (err, data) => {
  16.         let input: cryptoFramework.DataBlob = { data: CipherModel.stringToUint8Array(message)};
  17.         cipher.doFinal(input, (err, data) => {
  18.           //let that = new util.Base64Helper();
  19.           //let result = that.encodeToStringSync(data.data)
  20.           LogUtil.d(TAG, "--------------------------result is " + data.data);
  21.         })
  22.       })
  23.     })
  24.   }
  25.   public static  aesDecrypt(message: string, key: string, iv: string) {
  26.     let paramsSpec: cryptoFramework.IvParamsSpec = { iv: { data: CipherModel.stringToUint8Array(iv)}, algName: "IvParamsSpec" }
  27.     let aesGenerator = cryptoFramework.createSymKeyGenerator(AES256);
  28.     let cipher = cryptoFramework.createCipher(AES128_CBC_PKCS7);
  29.     let pubKeyBlob: cryptoFramework.DataBlob = { data: CipherModel.stringToUint8Array(key) };
  30.     aesGenerator.convertKey(pubKeyBlob, (err, symKey) => {
  31.       cipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, paramsSpec, (err, data) => {
  32.         //let that = new util.Base64Helper();
  33.         //let newMessage = that.decodeSync(message);
  34.         let input: cryptoFramework.DataBlob = { data: message };
  35.         cipher.doFinal(input, (err, data) => {
  36.           let result = CipherModel.uint8ArrayToString(data.data)
  37.           LogUtil.d(TAG, "result is " + result);
  38.         })
  39.       })
  40.     })
  41.   }
  42. }
复制代码

代码调整后:
  1. export class AESUtil {
  2.   //iv ParamsSpec
  3.   static genIvParamsSpec(iv:string) {
  4.     let dataIv=Utils.stringToUt8Array(iv);
  5.     let ivBlob: cryptoFramework.DataBlob = { data: dataIv };
  6.     let ivParamsSpec: cryptoFramework.IvParamsSpec = {
  7.       algName: "IvParamsSpec",
  8.       iv: ivBlob
  9.     };
  10.     return ivParamsSpec;
  11.   }
  12.   //key 转 SymKey
  13.   static async genSymKeyByData(key: string) {
  14.     let aesGenerator = cryptoFramework.createSymKeyGenerator(AES256);
  15.     let pubKeyBlob: cryptoFramework.DataBlob = { data: Utils.stringToUt8Array(key) };
  16.     let symKey = await aesGenerator.convertKey(pubKeyBlob);
  17.     return symKey;
  18.   }
  19.   //AES 加密 参数
  20.   public static async aesEncryptBs64(message: string, key: string, iv: string) {
  21.     //key转symKey
  22.     let symKey = await AESUtil.genSymKeyByData(key);
  23.     //加密
  24.     let cipher = cryptoFramework.createCipher(AES128_CBC_PKCS7);
  25.     await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, AESUtil.genIvParamsSpec(iv));
  26.     let input: cryptoFramework.DataBlob = { data:  Utils.stringToUt8Array(message)};
  27.     let cryptData = await cipher.doFinal(input);
  28.     //对加密值base64编码
  29.     let that = new util.Base64Helper();
  30.     let result = that.encodeToStringSync(cryptData.data)
  31.     return result;
  32.   }
  33.   //AES 解密 参数
  34.   public static async aesDecryptBs64(message: string, key: string, iv: string){
  35.     //base 64解密
  36.     let that = new util.Base64Helper();
  37.     let newMessage = that.decodeSync(message);
  38.     //key转symKey
  39.     let symKey = await AESUtil.genSymKeyByData(key);
  40.     //解密
  41.     let cipher = cryptoFramework.createCipher(AES128_CBC_PKCS7);
  42.     await cipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, AESUtil.genIvParamsSpec(iv));
  43.     let input: cryptoFramework.DataBlob = { data: newMessage };
  44.     let cryptData = await cipher.doFinal(input);
  45.     //对解密值 转string
  46.     let result = Utils.ut8ArrayToString(cryptData.data)
  47.     return result
  48.   }
  49. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

圆咕噜咕噜

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表