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