Python——验证椭圆曲线加密点乘运算

本文涉及的产品
性能测试 PTS,5000VUM额度
可观测可视化 Grafana 版,10个用户账号 1个月
可观测监控 Prometheus 版,每月50GB免费额度
简介: Python——验证椭圆曲线加密点乘运算

00 前情提要

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

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


01 实现背景

image.png


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()



03 实现效果

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

image.png

验证成功~~~

目录
相关文章
|
3月前
|
安全 Linux 数据安全/隐私保护
python知识点100篇系列(15)-加密python源代码为pyd文件
【10月更文挑战第5天】为了保护Python源码不被查看,可将其编译成二进制文件(Windows下为.pyd,Linux下为.so)。以Python3.8为例,通过Cython工具,先写好Python代码并加入`# cython: language_level=3`指令,安装easycython库后,使用`easycython *.py`命令编译源文件,最终生成.pyd文件供直接导入使用。
python知识点100篇系列(15)-加密python源代码为pyd文件
|
2月前
|
机器学习/深度学习 存储 数据挖掘
Python 编程入门:理解变量、数据类型和基本运算
【10月更文挑战第43天】在编程的海洋中,Python是一艘易于驾驭的小船。本文将带你启航,探索Python编程的基础:变量的声明与使用、丰富的数据类型以及如何通过基本运算符来操作它们。我们将从浅显易懂的例子出发,逐步深入到代码示例,确保即使是零基础的读者也能跟上步伐。准备好了吗?让我们开始吧!
37 0
|
3月前
|
算法 安全 Go
RSA加密算法详解与Python和Go实现
RSA加密算法详解与Python和Go实现
220 1
|
3月前
|
存储 算法 安全
Python 加密算法详解与应用
Python 加密算法详解与应用
58 1
|
3月前
|
数据安全/隐私保护 Python
python学习十一:python常用模块使用,如 加密模块pyarmor,时间模块time等
这篇文章介绍了Python中两个常用模块的使用:加密模块pyarmor用于保护代码,以及时间模块time用于处理时间相关的功能。
103 0
|
3月前
|
数据安全/隐私保护 Python
Python中的MD5加密“解密”
Python中的MD5加密“解密”
118 0
|
3月前
|
安全 测试技术 Go
Python 和 Go 实现 AES 加密算法的技术详解
Python 和 Go 实现 AES 加密算法的技术详解
159 0
|
人工智能 Python 资源调度
Python计算&绘图——曲线拟合问题(转)
题目来自老师的课后作业,如下所示。很多地方应该可以直接调用函数,但是初学Python,对里面的函数还不是很了解,顺便带着学习的态度,尽量自己动手code。             测试版代码,里面带有很多注释和测试代码:   [python] view plain copy  ...
1422 0
|
1月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
1月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。