sage中求解离散对数我目前知道的四个函数:
(1)discrete_log:通用的求离散对数的方法:discrete_log(a,base,ord,operation)
(2)discrete_log_rho:求离散对数的Pollard-Rho算法:discrete_log_rho(a,base,ord,operation)
(3)discrete_log_lambda:求离散对数的Pollard-kangaroo算法(也称为lambda算法):discrete_log_lambda(a,base,bounds,operation)
(4)bsgs:小步大步法:bsgs(base,a,bounds,operation)
参数说明:求解以base为底,a的对数;ord为base的阶,可以缺省,operation可以是'+'与'*',默认为'*';bounds是一个区间(ld,ud),需要保证所计算的对数在此区间内。
下面分别举例使用这些函数对ElGamal的分析与Ecc的分析。
#生成64位的素数p作为模数,int为32位,超过int要在数字后加L
p=random_prime(2L**64)
#定义有限域GF(p)
G=GF(p)
#找一个模p的原根
gp ('znprimroot('+str(p)+')')
#输出Mod(rt,p),则x是模p的原根
g=G(rt)
#生成私钥
x&