3
for (int ii = 0 ; ii < 200 ; ii++)
    {
     encrypt();    
    }

long start = System.currentTimeMillis();
    for (int ii = 0 ; ii < 2000 ; ii++)
    {
     encrypt();    
    }
long elapsed = System.currentTimeMillis() - start;

for (int ii = 0 ; ii < 200 ; ii++)
    {
     decrypt();    
    }

long start = System.currentTimeMillis();
    for (int ii = 0 ; ii < 2000 ; ii++)
    {
     decrypt();    
    }
long elapsed = System.currentTimeMillis() - start;



private void encrypt()
    {
            M = new BigInteger(64,random);
            C = M.multiply(k).mod(N);  
    }

private void decrypt()
    {
            kk= k.modinverse(N); 
            Mp = kk.multiply(c).mod(N); 
    }

しかし、このプログラムを netbeans プラットフォームで実行すると、結果が正しくないように感じます。実行時間の下で任意の 2 つのアルゴリズムの暗号化を比較する方法はありますか。必要な復号化アルゴリズムは、暗号化アルゴリズムよりも時間がかかりますか? 何か提案してください。

4

1 に答える 1

2

まず第一に、暗号化と復号化の方法は、重大なセキュリティに対して明らかに正しくありません。

暗号化方法には、ランダムな BigInteger の生成も含まれているようです。通常、これはキー ペアを生成するときにのみ行います (その後、少なくとも RSA アルゴリズムでは、ランダムな整数ではなく素数を生成します)。だから、これがどのような暗号化/復号化方法であるかは、私を超えています。

さらに、Java VM の最適化には時間がかかります。したがって、基本的には、非常に多くのテスト ラウンドを使用してから、経過時間をラウンド数で割るのが最善です。

現在の出力は、乱数ジェネレーターの状態に大きく左右されます。エントロピーが枯渇すると、新しい数値を生成するのに長い時間がかかります。

于 2013-02-10T13:21:01.087 に答える