日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Discrete Log Algorithms :Baby-step giant-step

發(fā)布時間:2023/12/9 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Discrete Log Algorithms :Baby-step giant-step 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

離散對數(shù)的求解

1.暴力

2.Baby-step giant-step?

3.Pollard’s ρ algorithm

……

下面搬運一下Baby-step giant-step 的做法

?

這是在?https://ctf-wiki.github.io/ctf-wiki/crypto/asymmetric/discrete-log/discrete-log/ 上看到的,比較容易理解。

而且,里面的代碼寫得簡潔明了。

寫一下自己理解和自己照著寫了一遍

原文代碼:

def bsgs(g, y, p):m = int(ceil(sqrt(p - 1)))S = {pow(g, j, p): j for j in range(m)} #在字典S中存放了g^j和對應(yīng)的jgs = pow(g, p - 1 - m, p) #求解的是baby step中的值,也就是g^(-m),其實就是g^m mod p的逆元,也就可以使用egcd來求解for i in range(m):if y in S:return i * m + S[y] #S[y]取出的是此時y對應(yīng)的iy = y * gs % p #如果baby step的值和 giant step的值不相等,繼續(xù)執(zhí)行baby stepreturn None View Code

?

照著寫一遍的代碼

#求解離散對數(shù)問題import math def egcd(a,b):r0,r1,s0,s1=1,0,0,1n=bwhile(b):q,a,b=a//b,b,a%br0,r1=r1,r0-q*r1s0,s1=s1,s0-q*s1return r0%n #拓展歐幾里得返回的三個值是,a是a和b的最大公因數(shù),r0和s0分別是ax+by=c中的一組解x和y,【此時只是選擇返回一個r0,因為得到的是ax+by=gcd(a,b)中的x即可,有的時候x或者y可能為負(fù)數(shù),在求解正數(shù)的逆元的時候負(fù)數(shù)要對n再次求模運算#求解離散對數(shù)就是,X=G^a mod P,其中給出X,G,P的值,要求解的是 a的值,此處采用的是Baby step giant step的方法def bsgs(x,g,p): #求解x=g^a mod p中的a,其中g(shù)是生成元m=math.ceil(math.sqrt(p-1)) #m的值是 p-1開平方后向上取整bstep={pow(g,j,p):j for j in range(m)} #每一次 j 的增加表示 “baby-step”,一次乘上g,字典S中存了所有的g^j(j<m)以及其對應(yīng)的jgstep=egcd(pow(g,m),p) #算出了gstep的值,也就是g^-m的值for i in range(m):if x in bstep:return i*m+bstep[x]x=x*gstep%pprint(bsgs(37,3,101)) View Code

?

繼續(xù)學(xué)習(xí)其他的做法

參考資料:http://zoo.cs.yale.edu/classes/cs257/ppt/all/Mac/19_DiscreteLog.ppt

?

轉(zhuǎn)載于:https://www.cnblogs.com/Guhongying/p/9966875.html

總結(jié)

以上是生活随笔為你收集整理的Discrete Log Algorithms :Baby-step giant-step的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。