HarmonyOS Next 鸿蒙开发-如何使用服务端下发的RSA公钥(字符串)对明文数据进行加密

如何使用服务端下发的RSA公钥(字符串)对明文数据进行加密

将服务器下发的RSA公钥字符串替换掉pubKeyStr即可实现,具体可参考如下代码:

import { buffer, util } from '@kit.ArkTS';
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
/**
 * 使用RSA非对称密钥(PKCS1模式)加密
 * @param message 要加密的明文数据
 * @returns 加密后的字符串,base64编码
 */
export async function encryptRSA(message: string) {
  // 服务器下发RSA公钥字符串(base64编码)
  let pubKeyStr = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFQArGDm5BXM4jHHuZGIb/kUoqrSjXkjqPLgrDmqBFxNyYsyxvyFRO10nStQwdRkQkh5lZ5sqC1G/z6lyDPpEySTBo9S5GLZ2Tj4yinNjcMXmOwiHfyQAQo9LwdlyTedwRchg0fYewWBVTVhGcWPowT1aA+GnQhYwNmaS/iKQsNQIDAQAB";
  // 初始化Base64工具实例
  let base64Helper = new util.Base64Helper();
  // 公钥转换为Uint8Array,然后包装为DataBlob类型
  let pubKeyBlob: cryptoFramework.DataBlob = { data: base64Helper.decodeSync(pubKeyStr) };
  // 创建RSA key生成器
  let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
  // 将公钥包装数据pubKeyBlob转换成密钥对类型KeyPair
  let keyPair = await rsaGenerator.convertKey(pubKeyBlob, null);
  // 创建 Cipher对象
  let cipher = cryptoFramework.createCipher('RSA1024|PKCS1');
  // 初始化加密模式,指定密钥keyPair.pubKey
  await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, keyPair.pubKey, null);
  // 包装要加密的明文
  let plainTextBlob: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) };
  // 传入明文,获取加密后的数据
  let encryptBlob = await cipher.doFinal(plainTextBlob);
  // 返回加密后的字符串
  return base64Helper.encodeToStringSync(encryptBlob.data);
}

参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-crypto-architecture-kit-V5#section1340915293719

posted @ 2024-06-25 18:28  MegaSu  阅读(291)  评论(0编辑  收藏  举报