Domanda

Sto cercando di implementare una procedura di base per generare una chiave RSA. La procedura accetta una serie di numeri a e b. Si deve controllare che l'Intervallo tra A e B è "cinque cifre".

Così mi si avvicinò con una soluzione:

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

Cosa è: Maple sembra comprendere p e q come variabili della funzione tipo. Voglio usare il log10 per scoprire quante cifre del primo numero deve al fine di calcolare una chiave RSA di sicurezza. Così evalb fallisce, perché non può determinare le due logaritmi ??

È stato utile?

Soluzione

Non si deve caricare il pacchetto di fuori della definizione proc -. Non è buona pratica

Non è necessario una chiamata a evalb, quando si utilizza if...then, come fa automaticamente che.

Si potrebbe o uso is, invece, o evalf entrambe le quantità in modo che la disuguaglianza può essere testato.

Ad esempio,

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:

o si potrebbe sostituire quella chiamata is applicando evalf ad entrambi i lati della condizionale < disuguaglianza. (Il comando is può effettivamente utilizzare evalf internamente, possibilmente attraverso shake, per capire.)

Che cosa si intende per il "intervallo" tra p e q essere "5 cifre" non è chiaro. Se vuoi dire che uno deve avere cinque cifre decimali più che l'altro allora si potrebbe desiderare di turno o TRUNC quelle chiamate log10 separatamente. E 'difficile da dire, come la formulazione è sfocata.

ps. Ho anche corretto l'errore ortografico "Rande" per "Gamma", e rimosso il inadeguato aperta parentesi dopo il if. E la chiamata randomize farà le RandomTools comando producono risposte diverse dopo ogni riavvio o in ogni nuova sessione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top