Python 求平方剩餘和離散對數

在密碼學上理論學習上,難免會有些計算量大的運算規則,像求解離散對數。這時最好的方案就是用計算機那億萬級的運算性能了,把這些規則用編程很容易描述,such as Python,優雅的藝術語言

離散對數:

#coding=utf-8
'''Author:Frank.ZhangLongQi
   Date:2017-01
   e-mail:[email protected]
   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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章