首页 > 解决方案 > 如何解压X9.62坐标

问题描述

我正在将一个字节 [] 传递给我的方法,并且我正在尝试生成一个 pubKey。查看错误看起来就像我首先需要在生成 pubKey 之前解压缩。

如何解码压缩坐标?

private static PublicKey getPublicKeyFromBytes(byte[] pubKey) throws NoSuchAlgorithmException, InvalidKeySpecException 
{
       
        ECPoint point = new ECPoint(new BigInteger(pubKey), BigInteger.ZERO);
        ECNamedCurveParameterSpec spec = ECNamedCurveTable.getParameterSpec("prime256v1");
        KeyFactory kf = KeyFactory.getInstance("ECDSA", new BouncyCastleProvider());
        ECNamedCurveSpec params = new ECNamedCurveSpec("prime256v1", spec.getCurve(), spec.getG(), spec.getN());
        ECPublicKeySpec pubKeySpec = new ECPublicKeySpec(point, params);
        ECPublicKey pk = (ECPublicKey) kf.generatePublic(pubKeySpec);
        return pk;
}

错误信息:

Exception in thread "main" java.security.spec.InvalidKeySpecException: invalid KeySpec: x value invalid for SecP256R1FieldElement
    at org.bouncycastle.jcajce.provider.asymmetric.ec.KeyFactorySpi.engineGeneratePublic(Unknown Source)

标签: javacryptographyelliptic-curve

解决方案


如果您pubKey是 X9.62 压缩点或未压缩点,则可以在decodePoint()以下位置使用 -method ECCurve

ECPoint point = spec.getCurve().decodePoint(pubKey);

推荐阅读