Pregunta

Estoy tratando de poner en práctica un procedimiento básico para generar una clave RSA. El procedimiento acepta una gama de números a y b. Se tiene que comprobar que el intervall entre ayb es "cinco dígitos".

Así que se me ocurrió una solución:

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 cosa es: Arce parece entender p y q como variables de la función tipo. Quiero usar el log10 para averiguar el número de dígitos del número primo-tiene el fin de calcular una clave RSA de seguro. Así evalb falla, porque no puede determinar los dos logaritmos ??

¿Fue útil?

Solución

No se debe cargar el paquete fuera de la definición proc -. Que no es una buena práctica

Usted no necesita una llamada a evalb, cuando se utiliza if...then, como lo hace automáticamente que.

Usted podría utilización is su lugar, o evalf ambas cantidades, de manera que la desigualdad puede ser probado.

Por ejemplo,

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 se podría sustituir esa llamada is aplicando evalf a ambos lados de la desigualdad condicional <. (El comando is en realidad puede utilizar evalf internamente, posiblemente a través de shake, para averiguarlo.)

¿Qué quiere decir con el "intervalo" entre p y q ser "5 cifras" no está claro. Si usted quiere decir que uno debe tener cinco dígitos decimales más que el otro entonces es posible que desee redonda o TRUNCAR esas llamadas log10 por separado. Es difícil de decir, ya que la redacción es confusa.

ps. También he corregido la falta de ortografía "Rande" para "gama", y quitó la inadecuada paréntesis de apertura justo después de la if. Y la llamada randomize hará que los RandomTools comando producir diferentes respuestas después de cada reinicio o en cada nueva sesión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top