往期鸿蒙全套实战文章必看:(附带鸿蒙全栈学习资料)
如何用已有证书做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());
}
}

2182

被折叠的 条评论
为什么被折叠?



