Вопрос

Я пытаюсь реализовать основную процедуру для создания ключа 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, чтобы выяснить, сколько цифр у Prime-Number имеет для расчета безопасного ключа RSA. Так evalb Не удается, потому что он не может определить два логарифма ??

Это было полезно?

Решение

Вы не должны загружать упаковку вне определения Proc - это не хорошая практика.

Вам не нужно звонить evalb, когда используешь if...then, как это автоматически делает.

Вы можете либо использовать is Вместо этого, или оценить оба величины, чтобы неравенство было проверено.

Например,

gen_rsa := proc(a, b)
local p, q, len_p, len_q, larger;
uses numtheory, RandomTools;
   randomize();
   # the two prime-numbers
   p:=safeprime(round(Generate(integer(range=a .. b))-1/2));
   q:=safeprime(round(Generate(integer(range=a .. b))-1/2));
   if is(log10(p) > log10(q)+5) then
      hi;
   else
      bye;
   end if;
end proc:

или вы можете заменить это is позвонить, подав заявку evalf к обеим сторонам < неравенство условное. ( is Команда может использовать evalf внутри, возможно через shake, чтобы понять это.)

То, что вы имеете в виду под «интервалом» между P и Q, будущим «5 цифр», неясно. Если вы имеете в виду, что нужно иметь еще пять десятичных цифр, которые другой, тогда вы можете округлить или обрезать эти вызовы LOG10 отдельно. Трудно сказать, так как формулировка нечеткая.

пса Я также исправил неправильное написание «Ранде» для «диапазона» и удалил неподходящий открытый пакет сразу после if. Анкет И randomize Call заставит команду RandomTools производить разные ответы после каждого перезапуска или в каждом свежем сеансе.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top