【发布时间】:2015-10-04 08:14:43
【问题描述】:
我有一个使用此代码生成的公私密钥对:
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC");
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
keyPairGenerator.initialize(256, secureRandom);
KeyPair pair = keyPairGenerator.generateKeyPair();
我想得到一个表示公钥的字节数组,使用 X9.62 和点压缩编码:
ANSI X9.62 为压缩、未压缩或混合形式的椭圆点定义强制八位字节字符串表示
我对点压缩的基本理解是,它使另一端能够从公钥表示的点计算出(使用曲线) Y 坐标,只给定 X 坐标和 LSB 的 LSB起始字节(0x02 或 0x03)中的 Y 坐标。我可以得到两个BigInteger X 和 Y 值如下:
ECPoint point = ((ECPublicKey) pk.getPublic()).getW();
BigInteger y = point.getAffineY();
BigInteger x = point.getAffineX();
如何使用 Java 中的压缩形式将公钥信息编码为字节数组?
【问题讨论】:
标签: java