8

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

我尝试使用密码库,但用 AES 加密 2MB 文件花了将近一分钟。在 Android 2.3(?)之前,河豚在 Cipher 中不可用。我怀疑它会更快。

我在 Symbian 上使用河豚进行加密,它的速度要快得多(不到 5-10 秒),所以我认为在 android 中它会因为使用 Java 虚拟机而变慢,我想尝试使用本机应用程序。

以前有人做过吗?

编辑:在 NDK 中加密要快得多。在那里做。对于 AES,有一个类似的问题,答案相同:Android 上的 AES 解密速度太慢而无法使用。NDK 会更快吗?其他想法?

4

5 回答 5

2

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

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

于 2011-07-22T10:44:04.427 回答
1

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

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

于 2011-05-26T14:10:58.753 回答
1

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

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

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

于 2011-05-27T20:29:20.727 回答
0

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

于 2011-06-02T12:07:04.183 回答
0

这不是开源的,但从性能的角度来看Chillkat是我发现的最好的。

于 2011-06-02T08:24:09.903 回答