Python 求平方剩余和离散对数

在密码学上理论学习上,难免会有些计算量大的运算规则,像求解离散对数。这时最好的方案就是用计算机那亿万级的运算性能了,把这些规则用编程很容易描述,such as Python,优雅的艺术语言

离散对数:

#coding=utf-8
'''Author:Frank.ZhangLongQi
   Date:2017-01
   e-mail:Zlonqi@qq.com
   Descrip:离散对数
'''
F=5   #F
x1=0  #本原根x
y1=1  #本原根y
a=1   #a
b=1   #b
x2=x1
y2=y1
def reverse(d,mod):
    for tmp in range(1,mod):
        if tmp*d%mod==1:
            return tmp
for i in range(1,9):

    if x1==x2 and (y1+y2)==0:
        x2,y2=0,0
        print("{0}g:".format(i+1),end="")
        print("(0,0)")
        exit()
    else:
        if x1==x2 and (y1-y2==0):
            t=reverse(2*y1,F)
            tmp=(3*x1**2+a)*t%F
        else:
            if x1==x2:
                print("{0}g:".format(i+1),end="")
                print("(0,0)******over")
                exit()
            t=reverse(x2-x1,F)
            tmp=(y2-y1)*t%F

        x3=(tmp**2-x1-x2)%F
        y3=(tmp*(x1-x3)-y1)%F
        print("{0}g:".format(i+1),end="")
        print((x3,y3))
        x2=x3
        y2=y3



求平方剩余:

F=5     #F=5
l=[]
for b in range(0,F):
    tmp=(b**3+b+1)%F #函数y=x**3+x+1
    t=(F-1)/2
    if (tmp**t)%F==1:
        for i in range(1,F):
            if (i**2-tmp)%F==0:
                l.append([b,i])
print(l)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值