2016-07-26 53 views
0

我正在构建AOSP,因此可以说我在Android中拥有所有模块的根。当然有OpenSSL库在其他模块中构建和重用。Android中的OpenSSL现有库

而且我们有基础应用程序(系统,外部,无论),它们也与本机代码进行通信。 而我的问题是:如何在本地项目中包含现有的Android OpenSSL库以使用它?

另一种说法是,我如何在本地代码中获得OpenSSL/BoringSSL的活动实例。 还有,如何获得Android Keystore engine的实例并使用它?

谢谢!

回答

1

release notes of Android 6.0

如果你在你的应用程序中使用了Android NDK,不要链接对加密库不属于NDK API的一部分,如libcrypto.so和libssl.so。这些库不是公共API,可能会在发布和设备上发生更改或中断,恕不另行通知。另外,您可能会暴露自己的安全漏洞。相反,修改您的本地代码以通过JNI调用Java加密API或静态链接您所选择的加密库。

除了C/native API之外,在您的本地代码中,您也可以访问Java API。因此,您可以编写调用常规Java API以访问AndroidKeyStore的C代码。您只需将Java代码翻译成C代码即可。以这种方式访问​​Java API有点复杂,但它是最安全的方式(关于兼容性)。

又见

+0

嘿!谢谢你的回答,它回答了我的第一个问题。也许你也知道Android Keystore引擎(上面的链接)。我可以用它的原生类吗? – GensaGames

+0

问题是我想从AndroidKeystore中使用PrivateKey,我可以不加密地加载,并用于加密,在Java中解密。但!我想在本地代码中使用该PrivateKey,但我无法在本地代码中传输它们的密钥(密钥没有指数),这是问题! – GensaGames

+0

正如我写的,使用Java代码访问AndroidKeystore并将其转换为本机代码。由此产生的代码会有点复杂,但它是Google推荐的方式。 – Robert