HarmonyOS 鸿蒙Next RSA加密的秘钥转换问题

发布于 1周前 作者 eggper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next RSA加密的秘钥转换问题

KeyFactory keyFactory = KeyFactory.getInstance(“RSA”);
byte[] bytePublicKey = Base64.decode(publicKey, 0);
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(bytePublicKey);
Key publicK = keyFactory.generatePublic(x509EncodedKeySpec);
String transformation = “RSA/ECB/PKCS1Padding”;
Cipher cipher = Cipher.getInstance(transformation);
cipher.init(1, publicK);

已知publicKey,ArkTS如何实现像上面安卓代码的将publicKey转成X509EncodedKeySpec,然后生成RSA公钥?重点是如何转X509EncodedKeySpec

15 回复
有帮忙回答一下吗?这边不转X509EncodedKeySpec,直接使用asyKeyGenerator.convertKey可以顺利加密,但是入参相同的情况下,加密出来的数据转成int8之后跟安卓加密结果不一样,怀疑是安卓多了一步X509EncodedKeySpec有关

请问,楼主问题解决了吗?感谢

同问,有大佬解决下没
楼主有解决了吗

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

/*
* 获取key对象
* */
private static async genPublicKeyPairByData(): Promise<cryptoFramework.KeyPair> {
let base64Helper = new util.Base64Helper();
let cerData = base64Helper.decodeSync(server_public_key)

let encodingBlob: certFramework.EncodingBlob = {
data: cerData,
// 根据encodingData的格式进行赋值,支持FORMAT_PEM和FORMAT_DER
encodingFormat: certFramework.EncodingFormat.FORMAT_DER
};
let x509Cert = await certFramework.createX509Cert(encodingBlob)
let x509PubKey = x509Cert.getPublicKey()
let keyGen = cryptoFramework.createAsyKeyGenerator('RSA1024|PRIMES_2')
let keyPair = keyGen.convertKey(x509PubKey.getEncoded(),null)
return keyPair;
}

请问这个方法执行成功了吗?这边按照这个写法执行createX509Cert时报错了,code=401 message=“create X509Cert failed”

你有解决了么?我也是报这个错

您好,鸿蒙加密生成的秘钥格式为ASN1的,需要转换一下才可以,可以详见三分库工具类eftool的SM2部分转换秘钥

不好意思,没看懂如何转换,麻烦可以帮忙给一下转换的示例代码吗,万分感谢

有人解决了这个问题了么

大佬,这个问题解决了吗

关于HarmonyOS 鸿蒙Next RSA加密的秘钥转换问题,首先需要确保秘钥格式正确,RSA秘钥通常包含公钥和私钥,格式需符合标准(如PKCS#1)。若遇到秘钥转换问题,检查秘钥是否为有效编码(如Base64)并正确转换。此外,确认使用的加密库和API支持你的秘钥类型和长度。如果问题依旧没法解决,请加我微信,我的微信是itying888。

回到顶部