如何为算法计算加密和解密运行时

时间:2013-01-26 17:24:00

标签: java rsa

我正在尝试使用Java中的以下两个函数来实现RSA算法:

time_one = 0    
private void encrypt()    
{   
    M = new BigInteger(64,random);   
    C = M.modPow(e,N);  
}  
time_encrypt = time_now-time_one  

time_two = 0   
private void decrypt()   
{   
    Mp = C.modPow(dp, p);   
    Mq = C.modPow(dq, q);   
    MM =    Mp.multiply(q).multiply(q.modInverse(p))).add(Mq.multiply(p).multiply(p.modInverse(q)))).mod(N);  
}  
time_decrypt = time_now-time_two

如何确定数据大小为1kb和2kb到10kb的时间encrypt()?如何表示不同大小的数据?

计算运行时的方法是否适合比较encrypt()decrypt()的速度运行时间?

1 个答案:

答案 0 :(得分:0)

一旦JIT启动,您将看到截然不同的结果。通常,您应该做的是使用加密/解密大约100k次来启动JVM而不计量它们。这将允许JIT启动并编译必要的部分到本机代码之后,您可以通过System.nanoTime()获取以纳秒为单位的启动时间来开始基准测试。使用此方法至少可以让您对代码的性能有所了解。但是,我强烈建议您完成以下演示:http://www.azulsystems.com/presentations/art-of-java-benchmarking

还要关注一些博客,知道自己在做什么的人会执行微观基准测试。其中一些是例如:

http://mechanical-sympathy.blogspot.co.uk/2011/09/adventures-with-atomiclong.htmlhttp://mentablog.soliveirajr.com/?s=benchmark

PS。为什么需要自己实施RSA?通常在密码学中,指导原则是 - “除非你和Bruce Schenier一样好,或者世界知名的密码学家不试图发明新的加密算法,否则他们很可能会不安全”。如果是出于学习目的,那么一定要去做。