HarmonyOS sm4解密问题?

使用cryptoFramework做sm4解密操作,解密失败。

代码如下:

import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { buffer, util } from '@kit.ArkTS';

export class SM4 {
  static async decode() {
    try {
      let textEncoder = new util.TextEncoder('utf-8');
      let keyData = textEncoder.encodeInto("xxxx");
      let symKey = await genSymKeyByData(keyData);
      let message = "1B28346B2EE0xxxx05B464C42D7757B";
      let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) };
      let decryptText = await decryptMessagePromise(symKey, plainText);
    } catch (e) {
      console.error(JSON.stringify(e))
    }
  }
}

async function genSymKeyByData(symKeyData: Uint8Array) {
  let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData };
  let symGenerator = cryptoFramework.createSymKeyGenerator('SM4_128');
  let symKey = await symGenerator.convertKey(symKeyBlob);
  console.info('convertKey success');
  return symKey;
}

async function decryptMessagePromise(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) {
  try {
    let decoder = cryptoFramework.createCipher('SM4_128|ECB|PKCS7');
    await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, null);
    let decryptData = await decoder.doFinal(cipherText);
    return decryptData
  } catch (e) {
    console.error(e)
    return null;
  }
}
阅读 540
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进