在密碼學上理論學習上,難免會有些計算量大的運算規則,像求解離散對數。這時最好的方案就是用計算機那億萬級的運算性能了,把這些規則用編程很容易描述,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)