【HarmonyOS NEXT】RSA和PEM证书加载公钥均失败,报错convertKey failed, 401, convert key fail

 【关键字】

RSA / PEM / X509CRL / 401 / convertKey / 加载公钥

【问题描述】

cryptoFramework.createAsyKeyGenerator('RSA1024|PRIMES_2') 方式创建报错 convertKey failed, 401, convert key fail.

公钥没有问题,字符串转换 Uint8Array没有问题,转换 Base64Util.encodeSync没有问题。

关键代码如下:

static async convertAsyKey() {
let secretKey = SecretKeyManager.getInstance().getCurrentSecretKey();
let public1 = secretKey.getSecretPublicKey()

MyLog.error("公钥Base64=="+public1)
let basedata= Base64Util.encodeSync(stringToUint8Array(public1))
MyLog.error("公钥Byte=="+basedata.toString())

let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
let pkBlob: cryptoFramework.DataBlob = {data: basedata }
rsaGenerator.convertKey(pkBlob, null, (err, keyPair) => {
if (err) {
console.error(`convertKey failed, ${err.code}, ${err.message}`);
return;
}
console.error('convertKey success');
});

createX509Crl方式创建报错failed, errCode: 401, errMsg:create X509Crl failed

关键代码如下:

let textEncoder = new util.TextEncoder();
let encodingBlob: certFramework.EncodingBlob = {
// 将CRL数据从string转为Unit8Array
data:textEncoder.encodeInto(crlData222),
// CRL格式,仅支持PEM和DER格式。在这个例子中,CRL用的是PEM格式
encodingFormat: certFramework.EncodingFormat.FORMAT_PEM
};

// 创建X509CRL实例
certFramework.createX509CRL(encodingBlob, (err, x509Crl) => {
if (err != null) {
// 创建X509CRL实例失败
console.error(`createX509Crl failed, errCode: ${err.code}, errMsg:${err.message} `);
return;
}
// 创建X509CRL实例成功console.error('createX509CRL success');

【解决方案】

如果公钥是base64编码的,直接使用decodeSync方法得到解码后对应的Uint8Array对象。

参考Demo如下:

//RSA公钥字符串(base64编码)
let pubKeyStr = 'M******SqGSIb3DQEBAQUAA4GNADCBiQKBgQCYGI4NquxHShzlBM1ymQ3FSye3Xc/Sn62EQUgxxTZoBqScEDPeLmQQqmJ0SRaFeSItvw5oRh3EWYddVJZtZnxh287XirmeJiDrhtCEH/EILJF7dZcUpi5groCyRADOaDiLP6Ed+h2VcrVgq1uBm7P5t8HS6fqWCRdCNLLA/9j2FwIDAQAB'

// 初始化Base64工具实例
let base64Helper = new util.Base64Helper();
// 公钥转换为Uint8Array,然后包装为DataBlob类型
let pubKeyBlob: cryptoFramework.DataBlob = { data: base64Helper.decodeSync(pubKeyStr) };
// 创建RSA key生成器
let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
// 将公钥包装数据pubKeyBlob转换成密钥对类型KeyPairlet keyPair = await rsaGenerator.convertKey(pubKeyBlob, null);

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值