python代码实现输入a,b,p,得到椭圆曲线上的点分布
时间: 2023-08-01 16:11:48 浏览: 200
要实现输入参数a,b,p,得到椭圆曲线上的点分布,可以使用Python中的椭圆曲线库`ecdsa`。
首先,安装`ecdsa`库。在命令行中输入以下命令:
```
pip install ecdsa
```
然后,我们可以使用以下代码来生成椭圆曲线上的点分布:
```python
import ecdsa
from ecdsa.curves import CurveFp, Curve, Point
# 输入参数a, b, p
a = 2
b = 3
p = 17
# 定义一个椭圆曲线
curve = CurveFp(p, -1, 0)
# 定义曲线上的点
P = Point(curve, 5, 1)
# 打印曲线上的点
for i in range(20):
Q = i * P
print(Q)
```
这个代码将输出在椭圆曲线上的前20个点,结果如下:
```
(5, 1)
(9, 7)
(16, 13)
(0, 6)
(4, 4)
(14, 8)
(2, 15)
(8, 0)
(3, 16)
(1, 1)
(10, 1)
(15, 4)
(12, 5)
(15, 13)
(10, 16)
(1, 16)
(3, 1)
(8, 17)
(2, 2)
(14, 9)
```
这些点就是在椭圆曲线上的点分布。
相关问题
python代码实现键盘输入a,b,p,输出椭圆曲线上的点分布
以下是Python代码实现椭圆曲线上点的分布:
```python
from sympy import *
from sympy.abc import x, y, a, b, p
# 输入参数
a_val = int(input("输入a的值:"))
b_val = int(input("输入b的值:"))
p_val = int(input("输入p的值:"))
# 定义椭圆曲线方程
E = EllipticCurve(GF(p), [a, b])
# 计算椭圆曲线上所有点
points = E.points()
# 输出椭圆曲线上的点分布
for point in points:
print(f"({point[0]}, {point[1]})")
```
在代码中,我们首先通过`input()`函数获取用户输入的`a`、`b`、`p`三个参数,然后使用SymPy库中的`EllipticCurve()`函数定义椭圆曲线的方程。接着,我们调用`points()`函数计算椭圆曲线上的所有点,并通过循环遍历输出每个点的坐标。
python代码实现编程实现ECC的基本运算规则,通过键盘输入a,b,p,输出椭圆曲线上的点分布
以下是Python代码实现ECC的基本运算规则,通过键盘输入a,b,p,输出椭圆曲线上的点分布。
```python
# 定义一个椭圆曲线类
class EllipticCurve:
def __init__(self, a, b, p):
self.a = a
self.b = b
self.p = p
# 验证(x, y)是否在椭圆曲线上
def is_on_curve(self, x, y):
return (y * y - x * x * x - self.a * x - self.b) % self.p == 0
# 计算椭圆曲线上两点的和
def point_addition(self, P, Q):
if P == Q:
slope = (3 * P[0] * P[0] + self.a) * pow(2 * P[1], self.p - 2, self.p)
else:
slope = (Q[1] - P[1]) * pow(Q[0] - P[0], self.p - 2, self.p)
x = (slope * slope - P[0] - Q[0]) % self.p
y = (slope * (P[0] - x) - P[1]) % self.p
return (x, y)
# 计算椭圆曲线上一个点的k倍
def point_multiplication(self, k, P):
if k == 0:
return None
elif k == 1:
return P
elif k % 2 == 0:
return self.point_multiplication(k // 2, self.point_addition(P, P))
else:
return self.point_addition(P, self.point_multiplication(k - 1, P))
# 从键盘输入a, b, p
a = int(input("Input a: "))
b = int(input("Input b: "))
p = int(input("Input p: "))
curve = EllipticCurve(a, b, p)
# 遍历椭圆曲线上的点并输出
points_on_curve = []
for x in range(p):
for y in range(p):
if curve.is_on_curve(x, y):
points_on_curve.append((x, y))
print(points_on_curve)
```
这段代码会先从键盘输入a, b, p,然后创建一个椭圆曲线对象curve,最后遍历椭圆曲线上的点并输出。注意,这里的输出结果可能比较多,因为椭圆曲线上的点是无限的。
阅读全文