问题描述
所以我需要实现索引演算算法来解决DLP。主要的 solveCalculus 函数应该只取 a,b 和素数 p 并返回 x,以便 a^x ≡ b mod p。现在我只有这个问题生成器:
def gen_dlp_prime(nbits):
p_0 = random_prime(pow(2,nbits),False,pow(2,nbits-1))
a = 2
p = a*p_0 + 1
while p not in Primes():
a += 1
p = a * p_0 + 1
return (p,p_0,a)
def rnd_dlp(nbits):
p,a = gen_dlp_prime(nbits)
g = 2
while pow(g,p) != 1:
g+=1
x = randrange(2,p)
return (p,g,x,pow(g,p))
def dlp_set_generator(beg,end,step=10):
print("----- a = b^x (mod p) -----")
for nbits in range(beg,step):
p,a = rnd_dlp(nbits)
print("Nbits = {}\n\tp = {}\n\tg = {}\n\ta = {}\n\tx = {}".format(
nbits,p,a,x))
dlp_set_generator(10,160)
其中 p 是素数,g 是 F_p* 的生成器,x 是从 2 到 p-1 的随机数,因此 a = g^x mod p。我的问题是如何实现这个算法?我在网上搜索了一些关于它的书籍,但我越来越困惑它是如何运作的。也许有人在 python 或 sage 中有实现?我将不胜感激。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)