cryptoUtil.ets 3.16 KB
import cryptoFramework from '@ohos.security.cryptoFramework';
import buffer from '@ohos.buffer';
import util from '@ohos.util';

// 加密消息

let pubKeyString = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAI05e8RfyEnLW/Un629lVJoVHntIanEAETot5nRcLmPJpXbC5lf5UgvVrDPPmoTxc567Hg9qq3AyAqWrSyqI6MECAwEAAQ==';

async function encryptMessagePromise(publicKey: cryptoFramework.PubKey, plainText: cryptoFramework.DataBlob) {
  let cipher = cryptoFramework.createCipher('RSA1024|PKCS1');
  await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, publicKey, null);
  let encryptData = await cipher.doFinal(plainText);
  return encryptData;
}
// 解密消息
async function decryptMessagePromise(privateKey: cryptoFramework.PriKey, cipherText: cryptoFramework.DataBlob) {
  let decoder = cryptoFramework.createCipher('RSA1024|PKCS1');
  await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, privateKey, null);
  let decryptData = await decoder.doFinal(cipherText);
  return decryptData;
}


// 生成RSA密钥对
async function genKeyPairByData() {

  let base64 = new  util.Base64Helper();
  let pubKeyData = base64.decodeSync(pubKeyString);

  let pkData = new Uint8Array(buffer.from(pubKeyString, 'utf-8').buffer)
  let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyData };

  let pkData2 = new Uint8Array([48, 129, 159, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 129, 141, 0, 48, 129, 137, 2, 129, 129, 0, 197, 64, 10, 198, 14, 110, 65, 92, 206, 35, 28, 123, 153, 24, 134, 255, 145, 74, 42, 173, 40, 215, 146, 58, 143, 46, 10, 195, 154, 160, 69, 196, 220, 152, 179, 44, 111, 200, 84, 78, 215, 73, 210, 181, 12, 29, 70, 68, 36, 135, 153, 89, 230, 202, 130, 212, 111, 243, 234, 92, 131, 62, 145, 50, 73, 48, 104, 245, 46, 70, 45, 157, 147, 143, 140, 162, 156, 216, 220, 49, 121, 142, 194, 33, 223, 201, 0, 16, 163, 210, 240, 118, 92, 147, 121, 220, 17, 114, 24, 52, 125, 135, 176, 88, 21, 83, 86, 17, 156, 88, 250, 48, 79, 86, 128, 248, 105, 208, 133, 140, 13, 153, 164, 191, 136, 164, 44, 53, 2, 3, 1, 0, 1]);
  let pubKeyBlob2: cryptoFramework.DataBlob = { data: pkData2 };

  let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');


  rsaGenerator.convertKey(pubKeyBlob2, null, (err, keyPair) => {
    if (err) {
      console.error(`convertKey failed, ${err.code}, ${err.message}`);
    }
    console.info('convertKey success');
  });

  rsaGenerator.convertKey(pubKeyBlob, null, (err, keyPair) => {
    if (err) {
      console.error(`convertKey failed, ${err.code}, ${err.message}`);
    }
    console.info('convertKey success');
  });

  let keyPair = await rsaGenerator.convertKey(pubKeyBlob, null)
  console.info('convertKey success');




  return keyPair;
}

export  async function encryptMessage(text:string) {
  let keyPair = await genKeyPairByData();
  let pubKey = keyPair.pubKey;
  let priKey = keyPair.priKey;
  let message = text;
  // 把字符串按utf-8解码为Uint8Array
  let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) };
  let encryptText = await encryptMessagePromise(pubKey, plainText);

  //base 64加密
  let base64 = new  util.Base64Helper();

  let result = base64.encodeToStringSync(encryptText.data);

  return result;
}