0

我正在尝试使用 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

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

计算运行时间的方法是否可以比较encrypt()和的速度运行时间decrypt()

4

1 回答 1

0

一旦 JIT 启动,您将看到截然不同的结果。通常,您应该做的是通过使用加密/解密大约 10 万次而不计量它们来启动 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 或世界著名的密码学家一样优秀,否则不要尝试发明新的密码算法,否则它们很可能是不安全的”。如果是出于学习目的,那么一定要去做。

于 2013-01-26T17:51:20.800 回答