2013-02-09 144 views
1
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平台上运行这个程序时结果不正确。 有没有办法在执行时比较任何两种算法密码学。 解密算法是否需要比加密算法长时间? 请有任何建议。如何计算经过时间的加密和解密算法?

+0

我会忽略第一次10000测试的结果,并且在热身后至少运行它们2-10秒。 – 2013-02-14 18:31:57

+0

值得记住的是,随机可能需要比您正在测试的东西更长的时间。我会尝试在开始计时之前构建随机数据。 – 2013-02-14 18:32:59

回答

1

首先,您的加密和解密方法显然不适用于任何严重的安全问题。

加密方法似乎也包含随机BigInteger的生成。通常情况下,只有在生成密钥对时才会这样做(然后至少对于RSA算法,您将生成一个素数,而不是任何随机整数)。那么这是什么样的加密/解密方法超出了我的想象。

此外,Java VM需要很长时间才能优化。所以基本上你最好使用大量的测试轮次,然后用经过的时间除以轮次数。

您的当前输出非常取决于随机数生成器的状态。如果熵被耗尽,它将需要很长时间才能产生新的数字。

+0

谢谢all.I将忽略包含生成随机大整数的那一行。如果此方法有效比较加密/解密经过的时间。现在只是我想知道的。多少次迭代达到可接受的结果? – Mhsz 2013-02-10 19:17:22

+0

取决于系统配置。可能这已经足够了,但最好的测试方法是进入一个非常高的数量,几百万。最低限度并不明确,但总的来说,如果几百万次的平均值与几千次的平均值相同,那么您将获得有效的结果。 – 2013-02-10 20:15:43

+0

谢谢你的猫头鹰。用于系统配置计算机硬件规格?如CPU和RAM或其他。我在我的笔记本电脑上运行这个程序有cpu ci3 2.30 GH,2.91 GB的RAM和集成了Java的NetBeans IDE 7.2.1平​​台:1.6.0_37; Java HotSpot(TM)客户端VM 20.12-b01。在我的项目中编写结果时是否有必要提及计算机规格? – Mhsz 2013-02-10 20:42:36