【发布时间】:2011-01-18 20:22:14
【问题描述】:
我正在尝试实现生成 RSA 密钥的基本过程。该过程接受一系列数字 a 和 b。它必须检查 a 和 b 之间的间隔是“五位数”。
所以我想出了一个解决方案:
with (numtheory);
gen_rsa := proc(a, b)
local p, q, len_p, len_q, larger;
# the two prime-numbers
p:=safeprime(round(RandomTools[Generate](integer(range=a .. b))-1/2));
q:=safeprime(round(RandomTools[Generate](integer(rande=a .. b))-1/2));
if( evalb(log10(p) > log10(q)+5 )
[...]
事情是:Maple 似乎将 p 和 q 理解为类型函数的变量。我想使用 log10 来找出素数有多少位,以便计算安全的 RSA 密钥。所以evalb失败了,因为它不能确定两个对数??
【问题讨论】:
-
除了acer的优秀回答:我认为对于你的应用,ilog10就足够了。本质上,
ilog10(n) = floor(log10(n)),所以你会丢失一些信息,但作为回报,它会立即计算为一个数字,而 log10(n) 将有剩余未计算的部分用于不是 10 的精确幂的数字。这样做的效果是ilog10 不会出现您对 log10 的评估问题。
标签: cryptography logarithm maple computer-algebra-systems