ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-11-08 10:35:51  阅读:402  来源: 互联网

标签:kotlin ecdsa cryptography bouncycastle android


生成了如下私钥:

    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)

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

标签:kotlin,ecdsa,cryptography,bouncycastle,android
来源: https://codeday.me/bug/20191108/2007421.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有