在我的程序中,我可以使用 Spongy Castle(Android 的 Bouncy Castle 等效项)从 PEM 文件中成功恢复 EC 私钥。由于该文件不包含公钥,我试图从私钥重新计算公钥。
我能够计算出有效的公钥。但是,我的公钥包含的数据(311 字节)比我的原始参考(92 字节)多得多。这甚至超过了私钥(152 字节)。
如何获得公钥的压缩 (?) 版本
PrivateKey privateKey; // private key from pem file
PublicKey referencePublicKey; // public key in my testing environment, generated with an EC KeyPairGenerator
KeyFactory factory = KeyFactory.getInstance("EC"); // using SpongyCastle provider
ECPrivateKeySpec privSpec = factory.getKeySpec(privateKey, ECPrivateKeySpec.class);
ECParameterSpec params = privSpec.getParams();
ECPoint q = params.getG().multiply(privSpec.getD());
ECPublicKeySpec pubSpec = new ECPublicKeySpec(q, params);
PublicKey publicKey = factory.generatePublic(pubSpec);
System.out.println( referencePublicKey.equals(publicKey) ); // true
System.out.println( referencePublicKey.getEncoded().length ); // 92
System.out.println( publicKey.getEncoded().length ); // 311