java - 如何解压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)
解决方案
如果您pubKey
是 X9.62 压缩点或未压缩点,则可以在decodePoint()
以下位置使用 -method ECCurve
:
ECPoint point = spec.getCurve().decodePoint(pubKey);
推荐阅读
- pyspark - 如何在 pyspark 中导入 vector_to_array 函数?
- html - 左对齐 flex 内的旋转文本
- python - 使用数据(不是坐标)的 xarray 多个 1d 插值
- azure - 无法在 Terraform v0.13 中使用 for_each 迭代安全组
- python-3.x - 使用python中的requests请求url错误?
- video - 使用 ffmpeg 从 %M 和 %S 中减去
- php - 对图像执行多个操作时的 ImageMagick (Imagick) 伪影。原因是什么?
- android - Android studio searchview:不显示搜索结果
- java - 如何让 Netbeans 识别 java.sql 模块
- ios - 在 iPhone 模拟器上运行的颤振卡在“Xcode 构建完成”上。(它在android模拟器中运行良好)