android-如何从以前生成的ECDSA两个编码密钥对构造私钥?

android-如何从以前生成的ECDSA两个编码密钥对构造私钥?,第1张

概述生成了如下私钥:fungetKeyPair():Pair<ByteArray,ByteArray>{Security.addProvider(provider)valgenerator=KeyPairGenerator.getInstance("ECDSA")valecSpec=ECNamedCurveTable.getParameterSpec("secp256r1"

生成了如下私钥:

    fun getKeyPair(): Pair<ByteArray, ByteArray> {        Security.addProvIDer(provIDer)        val generator = KeyPairGenerator.getInstance("ECDSA")        val ecSpec = ECnamedCurvetable.getParameterSpec("secp256r1")        generator.initialize(ecSpec)        val keyPair = generator.generateKeyPair()        val publicKey = keyPair.public as EcpublicKey        val privateKey = keyPair.private        return Pair(publicKey.q.getEncoded(true), privateKey.getEncoded())    }

可以再次重新构造公用密钥,如下所示:

    Security.addProvIDer(...spongy castle provIDer)    val ecSpecs = ECnamedCurvetable.getParameterSpec("secp256r1")    val q = ecSpecs.curve.decodePoint(publicKeyEncoded)    val pubSpec = EcpublicKeySpec(q, ecSpecs)    val keyFactory = KeyFactory.getInstance("ECDSA")    val generatedPublic = keyFactory.generatePublic(pubSpec)

与此同时如何从字节中重建私钥呢?

更新:

该代码在实际应用中运行良好,但在JUnit测试中却无法:

val keyFactory = KeyFactory.getInstance("ECDSA")val privSpec = PKCS8EncodedKeySpec(privateEncoded)val generatedPrivate = keyFactory.generatePrivate(privSpec)

在JUnit测试中,我收到此错误:

java.security.spec.InvalIDKeySpecException: encoded key spec not recognised

我的私钥已编码为150个字节.

解决方法:

由于密钥是使用标准Key.getEncoded()进行编码的,因此以下标准解决方案应该可以工作:

val keyFactory = KeyFactory.getInstance("EC")val privSpec = PKCS8EncodedKeySpec(privateEncoded)val generatedPrivate = keyFactory.generatePrivate(privSpec)

编码后的密钥应包含重建专用密钥所需的所有必需信息,而无需指定其他参数,就像您需要对简化的公用密钥进行 *** 作一样.

总结

以上是内存溢出为你收集整理的android-如何从以前生成的ECDSA两个编码密钥对构造私钥?全部内容,希望文章能够帮你解决android-如何从以前生成的ECDSA两个编码密钥对构造私钥?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1081834.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存