1

RSAキーを生成するための基本的な手順を実装しようとしています。このプロシージャは、aとbの範囲の数値を受け入れます。aとbの間隔が「5桁」であることを確認する必要があります。

だから私は解決策を思いついた:

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をtype関数の変数として理解しているようです。log10を使用して、安全なRSAキーを計算するために素数が何桁あるかを調べたいと思います。evalb2つの対数を決定できないため、失敗しますか?

4

1 に答える 1

2

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<isevalfshake

pとqの間の「間隔」が「5桁」であることの意味は明確ではありません。一方がもう一方よりも5桁多い小数点以下の桁が必要な場合は、これらのlog10呼び出しを個別に丸めたり切り捨てたりすることをお勧めします。言葉遣いが曖昧なので、言うのは難しいです。

ps。また、「範囲」のスペルミスのある「rande」を修正し、の直後の不適切な開き括弧を削除しましたif。また、このrandomize呼び出しにより、RandomToolsコマンドは、再起動するたび、または新しいセッションごとに異なる応答を生成します。

于 2011-01-19T12:37:09.660 に答える