圆咕噜咕噜 发表于 2025-2-12 17:49:16

鸿蒙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]
查看完整版本: 鸿蒙AES 加解密