目前我正在研究一个使用椭圆曲线的项目。请给我一个解决方案,确定一个点是否在椭圆曲线上?以及如何在椭圆曲线上获得点椭圆曲线点
椭圆曲线点
回答
检查点是否在椭圆曲线上很容易。只需检查您的点(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和一个订单。 要获得一个随机点,只需生成一个随机整数,即x,介于0和(order-1)之间,并选择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);
有关,请提供示例代码以获得使用弹性城堡的椭圆曲线上的点.... .. –
@ user605343:完成 –
@Rasmus,当你有堆栈溢出时需要接受教育。 –
- 1. 椭圆曲线Java
- 2. openssl椭圆曲线
- 3. 为椭圆曲线密码学生成椭圆曲线的基点(G)
- 4. 椭圆曲线上的点的数量
- 5. 椭圆曲线和点基数
- 6. 椭圆曲线中的点乘法
- 7. Python - matplotlib椭圆曲线
- 8. 椭圆曲线密码学
- 9. 椭圆曲线加密
- 10. 弯曲线形成圆形和椭圆
- 11. 椭圆和线交点JAVA
- 12. Sage数学奇点奇点椭圆曲线
- 13. 创建椭圆曲线边框
- 14. Android上的Bouncycastle椭圆曲线加密
- 15. PHP中的素数,椭圆曲线
- 16. PyECC示例 - Python椭圆曲线密码
- 17. 椭圆曲线乘法函数
- 18. openssl椭圆曲线:EC_POINT_add返回错误
- 19. Microsoft PlayReady DRM P160椭圆曲线参数
- 20. 在R中绘制椭圆/双曲线
- 21. Diffie-Hellman椭圆曲线私钥长度
- 22. Java 7 keytool椭圆曲线加密
- 23. 椭圆曲线ElGamal Java实现
- 24. c#中的椭圆曲线因子4.0
- 25. java中的椭圆曲线密码学
- 26. 在iOS中的椭圆曲线加密
- 27. MATLAB曲线拟合(椭圆形)
- 28. OpenSSL 1.0:删除椭圆曲线扩展
- 29. Android:InvalidKeySpecException:椭圆曲线例程:EC_GROUP_new_by_curve_name:UNKNOWN_GROUP
- 30. 在椭圆曲线密码术中划分点
是不是有更多的数学问题吗? “我如何检查一个点是否在曲线上?” – Thomas
通过标签判断,我猜OP要求与http://en.wikipedia.org/wiki/Elliptic_curve_cryptography –