我正在尝试使用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()
的速度运行时间?
答案 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.html 或http://mentablog.soliveirajr.com/?s=benchmark
PS。为什么需要自己实施RSA?通常在密码学中,指导原则是 - “除非你和Bruce Schenier一样好,或者世界知名的密码学家不试图发明新的加密算法,否则他们很可能会不安全”。如果是出于学习目的,那么一定要去做。