有佬搞过secp256r1椭圆曲线加密么?
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());
这里最后一行有的时候报坐标无效 有的时候可以计算成功
有劳指点一下