如何解压缩X9.62坐标 [英] How to decompress X9.62 coordinate
本文介绍了如何解压缩X9.62坐标的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在将byte []传递给我的方法,并且试图生成pubKey.观察错误外观,就像我首先需要在生成pubKey之前先解压缩.
I am passing a byte[] to my method and I am trying to generate a pubKey. Looking at the error look's like i first need to decompress before generating 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)
推荐答案
如果您的 pubKey
是X9.62压缩或未压缩的点,则可以使用 decodePoint()
- ECCurve
上的方法:
If your pubKey
is an X9.62 compressed or uncompressed point you can use the decodePoint()
-method on the ECCurve
:
ECPoint point = spec.getCurve().decodePoint(pubKey);
这篇关于如何解压缩X9.62坐标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文