diakla

导航

攻防世界 easy_ECC

学了一下椭圆曲线加密
参考:https://blog.csdn.net/sitebus/article/details/82835492

p=15424654874903
a=16546484
b=4548674875
k=546768
gx=6478678675
gy=5636379357093

def ksm(a,b):
    # print(a)
    r=1
    a=(a%p+p)%p
    aa=a
    while b:
        if b&1:
            r=r*a%p
        a=a*a%p
        b>>=1
    print(aa*r%p)
    return r

def add(x1,y1,x2,y2):
    # k=((ay-by)*ksm((ax-bx+p)%p,p-1)%p+p)%p;
    # a=((k*k-ax-bx)%p+p)%p
    # b=(k*(ax-(a-p))%p+p)%p
    # print(x1,end=" ")
    # print(y1);
    # print(x2,end=" ")
    # print(y2);
    if x1==None:
        return x2,y2
    if x2==None:
        return x1,y1
    
    if x1==x2 and y1!=y2:
        return None,None
    
    if x1==x2:
        m=(3*x1*x1+a)*ksm(2*y1%p,p-2)
    else:
        m=(y1-y2)*ksm((x1-x2)%p,p-2)
    # print(m%p)
    x3=m*m-x1-x2
    y3=y1+m*(x3-x1)
    return x3%p,-y3%p

# k=k-1
rx=None
ry=None
while k:
    if k&1:
        rx,ry=add(rx,ry,gx,gy)
    # print(gx,end="     ")
    # print(gy)
    gx,gy=add(gx,gy,gx,gy)
    k>>=1
    # print(rx,end=" ")
    # print(ry)
    
print(rx+ry)

# 19477226185390

posted on 2020-12-11 15:33  diakla  阅读(94)  评论(0)    收藏  举报