secp256r1椭圆曲线ECDH密钥协商坐标无效?

    public static KeyPair gettempKey(){

Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

// 获取secp256k1曲线参数规格

ECNamedCurveParameterSpec spec = ECNamedCurveTable.getParameterSpec("secp256r1");

// 创建密钥对生成器

KeyPairGenerator generator = KeyPairGenerator.getInstance("EC", "BC");

generator.initialize(spec);

// 生成密钥对

KeyPair keyPair = generator.generateKeyPair();

return keyPair;

}

我先用这个生成个密钥对来做接收端的公私钥,然后发送端每次都是生成新的临时密钥对 把公钥以0x04+x+y发过去按坐标解析出公钥再用我接收端的私钥指纹进行ECDH协商计算 如下

            PrivateKey myPrivateKey = getPrivateKeyFromS(myPriHex);

PublicKey othPublicKey = getPublicKeyFromXY(myPubHex);

KeyAgreement ecdhA = KeyAgreement.getInstance("ECDH");

ecdhA.init(myPrivateKey);

ecdhA.doPhase(othPublicKey, true);

String commonSecret = HexUtil.encodeHexStr(ecdhA.generateSecret());

这里最后生成密码有的时候报坐标无效 有的时候可以计算成功
下面是样例图片


回答:

getPublicKeyFromXY(String hexStr)方法里坐标生成point的时候转bigInteger没有规定是正号转换,sorry代码没粘全面

以上是 secp256r1椭圆曲线ECDH密钥协商坐标无效? 的全部内容, 来源链接: utcz.com/p/945301.html

回到顶部