鸿蒙NEXT版实战开发:如何用已有证书做RSA的公钥加密

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

往期鸿蒙全套实战文章必看:(附带鸿蒙全栈学习资料)


如何用已有证书做RSA的公钥加密

问题场景

用PEM格式证书中的公钥调用示例中rsaPubKeyEncrypt()方法报错:init failed,用指南中示例的pubKey是能加密成功的,但是出来的数据转换为string后是乱码数据。

解决措施

转string的时候要转成base64,也可以转成十六进制,具体转化方法可参考如下代码:

function 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; 
}

 用正确的证书数据参考如下代码对应内容进行处理:

import { cryptoFramework } from '@kit.CryptoArchitectureKit'; 
 
async function rsaPubKeyEncrypt(pubKey: cryptoFramework.PubKey, plainText: cryptoFramework.DataBlob) { 
  try { 
    let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024'); 
    let keyGenPromise: cryptoFramework.KeyPair = 
      await asyKeyGenerator.convertKey({ data: pubKey.getEncoded().data }, null); 
    let cipher = cryptoFramework.createCipher('RSA1024|PKCS1'); 
    await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, keyGenPromise.pubKey, null); 
    let encryptData = await cipher.doFinal(plainText); 
    return uint8ArrayToHexStr(encryptData.data); 
  } catch (err) { 
    console.info(err); 
    return uint8ArrayToHexStr(new Uint8Array()); 
  } 
}

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值