如何从33个字节重构33个字节的压缩NIST P-256公钥? [英] How to reconstruct 33-byte compressed NIST P-256 public key from 33 bytes?

查看:191
本文介绍了如何从33个字节重构33个字节的压缩NIST P-256公钥?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设可以像这样创建33字节编码的公钥:

Supposed that the 33 bytes encoded Public Key can be created like this:

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个字节时)?

How can I reconstruct it again on the other side (when I am having only the 33 bytes sent from here)?

我正在尝试以下代码:

val publicKey =KeyFactory.getInstance("EC").generatePublic(X509EncodedKeySpec(publicEncoded))

但是我想这是完全错误的,因为我得到了:

But I guess this is totally wrong, as I am getting the:

java.security.spec.InvalidKeySpecException:java.lang.RuntimeException:错误:0c000079:ASN.1编码例程:OPENSSL_internal:HEADER_TOO_LONG

java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0c000079:ASN.1 encoding routines:OPENSSL_internal:HEADER_TOO_LONG

我也在尝试:

val generator = KeyPairGenerator.getInstance("ECDSA")
val ecPublicKey = generator
        .generatePublic(X509EncodedKeySpec((publicEncoded))) as ECPublicKey

但是错误是:

java.security.spec.InvalidKeySpecException:无法识别编码的密钥规范

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

如何实现我的目标?

推荐答案

这应该可以完成:

import org.bouncycastle.jce.ECNamedCurveTable
import org.bouncycastle.jce.spec.ECPublicKeySpec

fun publicKeyFromCompressed(compressedPublicKey: ByteArray): PublicKey {
    val ecSpec = ECNamedCurveTable.getParameterSpec("secp256r1")
    val point = ecSpec.curve.decodePoint(compressedPublicKey)
    val publicKeySpec = ECPublicKeySpec(point, ecSpec)
    val keyFactory = KeyFactory.getInstance("ECDSA")
    val publicKey = keyFactory.generatePublic(publicKeySpec)
    return publicKey
}

这篇关于如何从33个字节重构33个字节的压缩NIST P-256公钥?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆