HarmonyOS rsa加密代码示例?

如题:HarmonyOS rsa加密代码示例?

阅读 565
1 个回答

示例参考如下:

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

@Entry
@Component
struct RSACrypto {
  @State message: string = '点击开始';

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            rsa1024Crypto()
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

// 加密消息
function encryptMessagePromise(publicKey: cryptoFramework.PubKey, plainText: cryptoFramework.DataBlob) {
  let cipher = cryptoFramework.createCipher('RSA1024|PKCS1');
  cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, publicKey, null);
  let encryptData = cipher.doFinalSync(plainText);
  return encryptData;
}

// 解密消息
function decryptMessagePromise(privateKey: cryptoFramework.PriKey, cipherText: cryptoFramework.DataBlob) {
  let decoder = cryptoFramework.createCipher('RSA1024|PKCS1');
  decoder.initSync(cryptoFramework.CryptoMode.DECRYPT_MODE, privateKey, null);
  let decryptData = decoder.doFinalSync(cipherText);
  return decryptData;
}

// 生成RSA密钥对
function genKeyPairByData(pubKeyData: Uint8Array, priKeyData: Uint8Array) {
  let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyData };
  let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyData };
  let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
  let keyPair = rsaGenerator.convertKeySync(pubKeyBlob, priKeyBlob);
  console.info('convertKey success');
  return keyPair;
}

function rsa1024Crypto() {

  let pkData = "xxx"
  let skData = "xxx"
  let base64 = new util.Base64Helper();
  let base64pkData = base64.decodeSync(pkData)
  let base64skData = /*new Uint8Array()*/ base64.decodeSync(skData);
  let keyPair = genKeyPairByData(base64pkData, base64skData);
  let pubKey = keyPair.pubKey;
  let priKey = keyPair.priKey;
  let message = " This is a long plainTest!" /*'This is a test'*/;
  // 把字符串按utf-8解码为Uint8Array
  let plainText: cryptoFramework.DataBlob =
    { data: new Uint8Array(/*base64.decodeSync(messageBase64)*/buffer.from(message, 'utf-8').buffer) };
  let encryptText = encryptMessagePromise(pubKey, plainText);
  let decryptText = decryptMessagePromise(priKey, encryptText);
  try {

  } catch (error) {
    console.error(JSON.stringify(error));
  }
  let baseDecrypto = base64.encodeToStringSync(decryptText.data)
  console.error('base64 decrypted result string:' + baseDecrypto);
  let messageDecrypted = buffer.from(decryptText.data).toString('utf-8');
  console.error('decrypted result string:' + messageDecrypted);
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进