使用Android NDK加密从普通Android应用程序传递的数据

时间:2011-02-16 08:13:30

标签: android encryption android-ndk blowfish

是否有可能并且值得尝试使用Android NDK开发一些服务器应用程序,它将加密从普通的基于Java的应用程序传递给它的数据(或者只使用一些内置的Linux加密库)?

我尝试使用Cipher库,但用AES加密2MB文件花了差不多一分钟。在Android 2.3(?)之前,在Cipher中不能使用blowfish。我怀疑它会快得多。

我在Symbian上使用blowfish进行加密,速度要快得多(5-10秒以内),所以我认为在android中它因为使用Java虚拟机而变慢,我想尝试本机应用程序。< / p>

以前有人做过吗?

编辑:NDK中的加密速度要快得多。在那里做。 AES的答案也有类似的问题:AES decryption on Android too slow to be usable. Will NDK be faster? Other ideas?

5 个答案:

答案 0 :(得分:2)

使用流解密时,使用AES / CBC / PKCS5时,Android 2.2中的BouncyCastle非常慢。 CPU将达到100%,吞吐量为5kb /秒。

使用Chilkat的速度更快,并且CPU使用率也很低(即使在模拟器中)。 但是Chilkat没有提供InputStream来处理流解密,而是在内部缓冲所有加密字节(直到发生堆空间错误)。因此,您必须自己管理流解密(例如,通过为每个块初始化chilkat ...)

答案 1 :(得分:1)

您正在测试哪个版本的Android?请记住,从Froyo开始,有一个跟踪JIT,它应该可以很好地用于加密库中的数学密集型循环。

对于旧版本,您可能想要使用NDK,是的。我不知道为什么你需要一个服务器 - 只需编译任何好的/快速加密库并使用NDK制作一个包装器。然后,您可以简单地使用基于Java的应用程序中的包装器。

答案 2 :(得分:1)

要回答你的问题,是的,你可能会写一些与NDK一起运行的东西,但我不明白你为什么需要这样做。

如果您只想加密进入sql存储的数据,可以查看SQLCipher(https://guardianproject.info/code/sqlcipher/

您也可以尝试使用一些充气城堡图书馆(http://www.bouncycastle.org/java.html)。它们可能比内置的android更快,或者它们可能有一个你可以使用的河豚库。

答案 3 :(得分:0)

这不是开源,但性能观点Chillkat是我找到的最好的。

答案 4 :(得分:0)

当然可以使用外部库来进行加密。您可以使用openssl作为示例https://github.com/guardianproject/openssl-android。唯一的问题是Java和C代码之间存在的JNI层的影响有多大。如果您需要将大量日期传递给C并返回,那么可以通过JNI层否定本机库获益。将更多功能从Java移动到C会更好,因为应该加密的数据只能在C中处理。例如,网络堆栈和加密可以在C中,而用户界面在Java中。如果这是可能的话,这只是你应该更好地了解的建议。