Question

Je suis en train de mettre en œuvre une procédure de base pour générer une clé RSA. La procédure accepte une plage de nombres a et b. Il doit vérifier que le intervall entre a et b est « cinq chiffres ».

Alors je suis venu avec une solution:

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 ) 
  [...]

La chose est: Maple semble comprendre p et q comme variables de la fonction de type. Je veux utiliser le log10 pour savoir combien de chiffres le premier numéro a pour calculer une clé RSA sûre. Donc evalb échoue, car il ne peut pas déterminer les deux logarithmes ??

Était-ce utile?

La solution

Vous ne devez pas charger le paquet en dehors de la définition de proc -. Ce n'est pas une bonne pratique

Vous n'avez pas besoin d'un appel à evalb, lors de l'utilisation if...then, comme il le fait automatiquement.

Vous pouvez soit utiliser is à la place, ou les deux quantités evalF de telle sorte que l'inégalité peut être testée.

Par exemple,

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:

ou vous pouvez remplacer cet appel is en appliquant evalf aux deux côtés de la condition de l'inégalité des <. (La commande is peut effectivement utiliser evalf en interne, éventuellement via shake, pour le comprendre.)

Qu'est-ce que vous entendez par « intervalle » entre p et q étant « 5 chiffres » est pas claire. Si vous voulez dire qu'il faut avoir cinq chiffres plus décimales que l'autre, alors vous voudrez peut-être ronde ou trunc ces appels log10 séparément. Il est difficile de dire que le libellé est floue.

ps. Je corrige aussi la faute d'orthographe « Rande » pour « plage » et supprimé le droit inappropriée ouvert entre parenthèses après la if. Et l'appel randomize fera la commande RandomTools produire des réponses différentes après chaque redémarrage ou à chaque nouvelle session.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top