
生成了如下私钥:
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两个编码密钥对构造私钥?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)