【发布时间】:2018-12-10 13:32:34
【问题描述】:
假设33字节编码的公钥可以这样创建:
Security.addProvider(provider)
val generator = KeyPairGenerator.getInstance("ECDSA")
val ecSpec = ECNamedCurveTable.getParameterSpec("secp256r1")
generator.initialize(ecSpec)
val keyPair = generator.generateKeyPair()
val privateKey = keyPair.private as ECPrivateKey
val publicKey = keyPair.public as ECPublicKey
val publicEncoded = publicKey.q.getEncoded(true)
我怎样才能在另一边再次重建它(当我只有从这里发送的 33 个字节时)?
我正在尝试以下代码:
val publicKey =KeyFactory.getInstance("EC").generatePublic(X509EncodedKeySpec(publicEncoded))
但我想这是完全错误的,因为我得到了:
java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0c000079:ASN.1 编码例程:OPENSSL_internal:HEADER_TOO_LONG
我也在尝试:
val generator = KeyPairGenerator.getInstance("ECDSA")
val ecPublicKey = generator
.generatePublic(X509EncodedKeySpec((publicEncoded))) as ECPublicKey
但错误是:
java.security.spec.InvalidKeySpecException:无法识别编码的密钥规范
如何实现我的目标?
【问题讨论】:
标签: android kotlin cryptography bouncycastle ecdsa