当前位置:   article > 正文

Python——验证椭圆曲线加密点乘运算_椭圆曲线点乘代码实现 python

椭圆曲线点乘代码实现 python

00 前情提要

最近处于期末复习阶段,对于现代密码学这门学科来说,计算椭圆曲线加密的时候肯定得进行点乘运算。而这点乘运算呢,其实说难也不难,就是系数较大的时候,计算量比较大,得细心点。

而为方便检验自己的笔算结果呢,这里使用一个简单的python程序验证生点乘运算结果的正确性。


01 实现背景

在这里插入图片描述

02 实现源码

def ny(e,z): #求乘法逆元
    k=1
    e=e%z
    while((k*z+1)%e!=0):
        k=k+1
    d=int((k*z+1)/e)
    return d

def myfmod(a,b,c): #求分数的模
    a=a%c
    d=(a*ny(b,c))%c
    return d

def muchG(x,y,p,a): #同G
    if (3*pow(x,2)+a)%(2*y)==0:
        L=((3*pow(x,2)+a)/(2*y))%p
    else:
        L=myfmod(3*pow(x,2)+a,2*y,p)
    print("斜率L=%d"% L)
    x3= (pow(L,2)-2*x)%p
    y3= (L*(x-x3)-y)%p
    return x3,y3

def diffG(x1,y1,x2,y2,p): #异G
    if (y2-y1)%(x2-x1)==0:
        L=((y2-y1)/(x2-x1))%p
    else:
        L=myfmod((y2-y1),(x2-x1),p)
    print("斜率L=%d"% L)
    x3=(pow(L,2)-x1-x2)%p
    y3=(L*(x1-x3)-y1)%p
    return x3,y3

def tongG():
    a=int(input("请输入椭圆曲线的a:"))
    b=int(input("请输入椭圆曲线的b:"))
    p=int(input("请输入模数p:"))
    x=int(input("请输入生成元G的x坐标:"))
    y=int(input("请输入生成元G的y坐标:"))
    x3,y3=muchG(x,y,p,a)
    print("2G=(%d,%d)" % (x3,y3))
    f=input("按任意键继续")

def yiG():
    p=int(input("请输入模数p:"))
    x1=int(input("请输入P的x坐标:"))
    y1=int(input("请输入P的y坐标:"))
    x2=int(input("请输入Q的x坐标:"))
    y2=int(input("请输入Q的y坐标:"))
    x3,y3=diffG(x1,y1,x2,y2,p)
    print("P+Q=(%d,%d)" % (x3,y3))
    f=input("按任意键继续")

flag=1
while(flag!=0):
    print("1.同G")
    print("2.求异G")
    print("0.退出")
    flag=int(input("请选择:"))
    if flag==1:
        tongG()
    elif flag==2:
        yiG()


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65



03 实现效果

在这里插入图片描述
通过以上描述,我们得知 p = 11, a = 1 , b = 6 ,x = 2 ,y =7 ,m = 7 ,现在已确认点乘运算 2(2,7)=(5,2),那么下面我们来验证python小程序的正确性。

在这里插入图片描述
验证成功~~~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/612233
推荐阅读
相关标签
  

闽ICP备14008679号