gpt4 book ai didi

java - 椭圆曲线公钥(Java - bouncycaSTLe): How to get 32 byte X and 32 byte Y value from ECPublicKey. toString()

转载 作者:行者123 更新时间:2023-12-02 07:37:36 24 4
gpt4 key购买 nike

我有一个用于椭圆曲线的自定义加密引擎,我正在尝试使其与 Java 的 bouncy caSTLe 加密兼容,因此我正在针对 Java 的 bouncycaSTLe 测试我的 API( key 对生成)。

第一件事是在 Java 和我的加密引擎之间共享公钥,这样我就可以获得相同的共享 secret 。

我的模块采用椭圆曲线 32 字节 X 和 32 字节 Y 值。我能够通过调用下面的“publickeyJava .toString()”从 Java 代码中输出 X 和 Y,输出格式为“X: .... 和 Y: .....”(如下所示)。我复制将这些 X 和 Y 值粘贴到我的自定义加密引擎中,并验证我是否能够获得与 Java 的充气城堡生成的相同的 secret ,因此我知道我的转换是手动进行的。

问题是如何在 JAVA 中以编程方式提取这些 32 字节 X 和 Y 值?我使用 java 类来获取 X 和 Y 坐标并打印“getW.getAffineX() 和 getW. AffineY()”(如下面的代码所示),但这些值似乎与“publickey.tostring”生成的输出(这是我的模块需要的)不匹配。

有没有办法从打印“pubclickey.tostring”中提取 X 和 Y 值?请提出建议。

/*** 从 bouncycaSTLe crypto 打印椭圆曲线 X 和 Y 的 Java 代码 ****/

public static int generateECKeys() {
try {
ECNamedCurveParameterSpec parameterSpec = ECNamedCurveTable.getParameterSpec("secp256r1");
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("ECDH", "SC");

keyPairGenerator.initialize(parameterSpec);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PublicKey publickeyJava = keyPair.getPublic();

Log.e(TAG_LOG, "X & Y values are ...." + publickeyJava .toString());

Log.d("LOG_TAG", "BigInteger X value is = " + ((ECPublicKey) publickeyJava).getW().getAffineX().toString());
Log.d("LOG_TAG", "BigInteger Y value is = " + ((ECPublicKey) publickeyJava).getW().getAffineY().toString());
/* .....code to generate shared secret ..... */
return 1;
} catch(Exception e){e.printStackTrace();}
return 0;
}

/******** 输出********/

X & Y values are ....EC Public Key             
X: f98c87d3b6db30895b275630f30df9d796d067b06e4836f5615cad84965f4f85
Y: b8b58cb767f23e4bc4db0cc371ffb50cf12aa30407c1ba236f78a6c38948c2ee

BigInteger X value is = 324637435756455760457435640555474465574856445654455076545679
BigInteger Y value is = 954378375783465749076758439759347657056597437786534984623864

谢谢

最佳答案

今天我也遇到了和你一样的问题。我以这种方式解决了它,在我看来,它比解析字符串更容易。

ECPublicKey publickeyJava = (ECPublicKey)keyPair.getPublic();
ECPoint ecp = chiavePubblica.getW();
// to access X and Y you can use
ecp.getAffineX()
ecp.getAffineY()

关于java - 椭圆曲线公钥(Java - bouncycaSTLe): How to get 32 byte X and 32 byte Y value from ECPublicKey. toString(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32936548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com