Android上的Bouncy Castle密钥生成速度极慢

时间:2012-03-07 08:00:14

标签: android bouncycastle

我有一个使用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要长许多个数量点似乎很奇怪。这个问题的可能原因是什么?

1 个答案:

答案 0 :(得分:0)

杰克,虽然跟踪JIT应该与Crypto库配合得很好,你能尝试用NDK吗?据我所知,即使在JIT之后,NDK的性能提升仍然很重要。 (大约10-50x)