HarmonyOS AES解密失败,是否有AES加解密代码示例参考?

解密前数据:

g0deIVlB1/jVHkQY45+ujkM+rPptyRej2xxxxqOdG0R2ik5+WYUlbT//eatYEkSniFkVxmjfpD2TOIT5UDfYveID5JBIPJHF+b/MQddydLjBKZCAlpUtBbHo17vgRsJUxWAUURpaCNhhfz8jIZeh5AO0cE4Mmqk=

解密后数据:

{
  "errorMsg": "用户名密码错误",
  "msgcode": "36",
  "loginEmp": null,
  "time": null,
  "count": null,
  "isRemind": null,
  "flag": null
}
阅读 457
1 个回答

示例参考:

stringToUint8Array(str: string) {
  return new Uint8Array(buffer.from(str, 'utf-8').buffer);
}

// 字节流转成可理解的字符串
uint8ArrayToString(array: Uint8Array) {
  let out: string = '';
  let index: number = 0;
  let len: number = array.length;
  while (index < len) {
    let character = array[index++];
    switch (character >> 4) {
      case 0:
      case 1:
      case 2:
      case 3:
      case 4:
      case 5:
      case 6:
      case 7:
        out += String.fromCharCode(character);
        break;
      case 12:
      case 13:
        out += String.fromCharCode(((character & 0x1F) << 6) | (array[index++] & 0x3F));
        break;
      case 14:
        out += String.fromCharCode(((character & 0x0F) << 12) | ((array[index++] & 0x3F) << 6) |
          ((array[index++] & 0x3F) << 0));
        break;
      default:
        break;
    }
  }
  return out;
}

//摘要结果是Uint8Array类型,转换得到十六进制字符串数据
uint8ArrayToHexStr(data: Uint8Array): string {
  let hexString = "";
  let i: number;
  for (i = 0; i < data.length; i++) {
    let char = ('00' + data[i].toString(16)).slice(-2);
    hexString += char;
  }
  return hexString;
}

/**
 * AES Encrypt
 * @param message
 * @param callback
 */
aesEncrypt(message: string, callback: Callback<string>) {
  let aesGenerator = cryptoFramework.createSymKeyGenerator(AES128);
  let cipher = cryptoFramework.createCipher(AES128_PKCS7);
  let pubKey = this.stringToUint8Array(AES_ENCRYPT_KEY)
  let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKey };
  aesGenerator.convertKey(pubKeyBlob, (err, symKey) => {
    if (err) {
      console.error("convertKey: error." + (err as BusinessError).code);
      return;
    }
    cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, null, (err, data) => {
      let input: cryptoFramework.DataBlob = { data: this.stringToUint8Array(message) };
      cipher.doFinal(input, (err, data) => {
        Logger.info(TAG, "EncryptOutPut is " + data.data);
        let that = new util.Base64Helper();
        let result = that.encodeToStringSync(data.data)
        Logger.info(TAG, "result is " + result);
        callback(result)
        // vexLOx6pW8+2k1MfWrnGMg==

      })
    })
  })
}

/**
 * AES Decrypt
 * @param message
 * @param callback
 */
aesDecrypt(message: string, callback: Callback<string>) {
  let aesGenerator = cryptoFramework.createSymKeyGenerator(AES128);
  let cipher = cryptoFramework.createCipher(AES128_PKCS7);
  let pubKey = this.stringToUint8Array(AES_ENCRYPT_KEY);
  let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKey };
  aesGenerator.convertKey(pubKeyBlob, (err, symKey) => {
    if (err) {
      console.error("convertKey: error." + (err as BusinessError).code);
      return;
    }
    cipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, null, (err, data) => {
      try {
        let that = new util.Base64Helper();
        let newMessage = that.decodeSync(message);
        let input: cryptoFramework.DataBlob = { data: newMessage };
        cipher.doFinal(input, (err, data) => {
          if (err) {
            Logger.error(TAG, "cipher doFinal." + (err as BusinessError).code);
            return;
          }
          Logger.info(TAG, "DecryptOutPut is " + data?.data);
          let result = this.uint8ArrayToString(data?.data)
          Logger.info(TAG, "result is " + result);
          callback(result)
        })
      } catch (err) {
        Logger.info(TAG, "cipher init error: " + (err as BusinessError).code);
        return err;
      }
    })
  })
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进