椭圆曲线点

目前我正在研究一个使用椭圆曲线的项目。 请给我一个解决方案,确定一个点是否在椭圆曲线上? 以及如何在椭圆曲线上得到一个点

检查点是否在椭圆曲线上很容易。 只需检查您的点(x,y)满足定义椭圆曲线的等式: y^2 = x^3 + ax + b (记得在正确的字段中执行计算)。

使用Bouncycastle你可以这样做:

 ECCurve curve = //... ECFieldElement x = //... ECFieldElement y = //... ECFieldElement a = curve.getA(); ECFieldElement b = curve.getB(); ECFieldElement lhs = y.multiply(y); ECFieldElement rhs = x.multiply(x).multiply(x).add(a.multiply(x)).add(b); boolean pointIsOnCurve = lhs.equals(rhs); 

你用加密法标记了这个问题,所以我假设你在询问有限域上的椭圆曲线。 曲线将有一个发电机, g和一个订单。 要获得随机点,只需在0和(order – 1)之间生成一个随机整数x ,然后选择x * g

您可以使用Bouncycastle这样做:

 X9ECParameters x9 = NISTNamedCurves.getByName("P-224"); // or whatever curve you want to use ECPoint g = x9.getG(); BigInteger n = x9.getN(); int nBitLength = n.bitLength(); BigInteger x; do { x = new BigInteger(nBitLength, random); } while (x.equals(ZERO) || (x.compareTo(n) >= 0)); ECPoint randomPoint = g.multiply(x);