我有一个使用Bouncy Castle构建的Android加密应用程序(实际上使用的是Spongy Castle,但基本上是相同的东西)。由于某种原因,密钥生成非常缓慢(大约几分钟)。
这是我正在使用的测试方法:
@Test
public void testHMAC()
{
System.out.println(getTestAnnouncement("testHMAC"));
long start = System.currentTimeMillis();
final PBEParametersGenerator generator = new PKCS5S2ParametersGenerator();
generator.init(PBEParametersGenerator.PKCS5PasswordToBytes(("mypassword").toCharArray()), new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 }, 8192);
byte[] key = ((KeyParameter)generator.generateDerivedParameters(256)).getKey();
long time = System.currentTimeMillis() - start;
Assert.assertTrue("Generated " + key.length + "-byte key, took " + time + "ms", true);
}
当我在2.4 GHz Intel Core 2 Duo机器上运行时,大约需要0.05秒(50 ms)。当我在Android上运行相同的方法时,需要几十万毫秒(即〜3-5 分钟)。
我在运行Android 2.2.1的HTC Thunderbolt上运行它。应用程序的目标是2.1,如果这有任何区别(我记得读过< 2.2没有JIT的东西,但我认为应用程序目标没有区别,只要手机上的实际操作系统是> = 2.2)。这是一款非常强大的手机,拥有1 GHz的Snapdragon处理器,生成一个密钥比使用PC要长许多个数量点似乎很奇怪。这个问题的可能原因是什么?