COMSEC第五次作业

COMSEC第五次作业

COMSEC第五次作业_第1张图片

10.12

由python代码得到点:

for x in range(7):
    for y in range(7):
        if (y*y)%7==(x*x*x+2*x+1)%7:
            print(x,y)

E 7 ( 2 , 1 ) 上 的 点 为 ( 0 , 1 ) ( 0 , 6 ) ( 1 , 2 ) ( 1 , 5 ) 以 及 无 穷 远 处 的 点 E_7(2,1)上的点为(0,1)(0,6)(1,2)(1,5)以及无穷远处的点 E7(2,1)(0,1)(0,6)(1,2)(1,5)

10.13

椭圆曲线上负点的定义为其逆元 P = ( x , y ) P=(x,y) P=(x,y) P − 1 = ( x , − y ) P^{-1}=(x,-y) P1=(x,y)得到

P − 1 = ( 3 , − 5 ) = ( 3 , 2 ) P^{-1}=(3,-5)=(3,2) P1=(3,5)=(3,2)

Q − 1 = ( 2 , − 5 ) = ( 2 , 5 ) Q^{-1}=(2,-5)=(2,5) Q1=(2,5)=(2,5)

R − 1 = ( 5 , 0 ) R^{-1}=(5,0) R1=(5,0)

10.14

根据椭圆曲线上的加法定义

COMSEC第五次作业_第2张图片

用python写出程序计算 G 2 − G 13 G_2-G_{13} G2G13

import gmpy2
def add(x1,y1,x2,y2,mod,a):
    k=0
    if x1==x2 and y1==(-y2)%mod:
        return float('inf')
    elif x1==x2 and y1==y2:
        k=(3*x1*x1+a)*gmpy2.invert(2*y1%mod,mod)%mod
        x3=(k*k-2*x1)%mod
        y3=(k*(x1-x3)-y1)%mod
        return x3,y3
    else:
        k=(y2-y1)*gmpy2.invert((x2-x1),mod)%mod
        x3=(k*k-x1-x2)%mod
        y3=(k*(x1-x3)-y1)%mod
        return x3,y3

x1=3
y1=2
mod=11
a=1
for i in range(12):
    x1,y1=add(3,2,x1,y1,mod,a)
    print("G",i+1,"的值为(",x1,y1,")")

G 2 的 值 为 ( 1 , 8 ) G 2 的值为( 1 , 8 ) G2(1,8)
G 3 的 值 为 ( 5 , 4 ) G 3 的值为( 5 , 4 ) G3(5,4)
G 4 的 值 为 ( 4 , 8 ) G 4 的值为( 4 , 8 ) G4(4,8)
G 5 的 值 为 ( 7 , 7 ) G 5 的值为( 7 , 7 ) G5(7,7)
G 6 的 值 为 ( 6 , 8 ) G 6 的值为( 6 , 8 ) G6(6,8)
G 7 的 值 为 ( 6 , 3 ) G 7 的值为( 6 , 3 ) G7(6,3)
G 8 的 值 为 ( 7 , 4 ) G 8 的值为( 7 , 4 ) G8(7,4)
G 9 的 值 为 ( 4 , 3 ) G 9 的值为( 4 , 3 ) G9(4,3)
G 10 的 值 为 ( 5 , 7 ) G 10 的值为( 5 , 7 ) G10(5,7)
G 11 的 值 为 ( 1 , 3 ) G 11 的值为( 1 , 3 ) G11(1,3)
G 12 的 值 为 ( 10 , 7 ) G 12 的值为( 10 , 7 ) G12(10,7)

你可能感兴趣的:(python,算法)