android - OpenSSL Android NDK 的包装类

标签 android c android-ndk openssl wrapper

我按照下一个教程在我的应用程序中获取 OpenSSL Fips https://wiki.openssl.org/index.php/FIPS_Library_and_Android 现在我可以将库导入我的项目并链接它,但是我需要创建一个包装类来将我的库与我的 Java 代码连接起来,我的问题是......有没有办法以简单的方式实现这一点? OpenSSL 库中有很多方法,我需要阅读所有这些方法的文档并为每个方法在 C 中创建一个函数,而且我没有 C 的经验,所以如果你知道另一种方法来做到这一点我会感谢你的帮助。

最佳答案

I need to create a wrapper class for connect my library with my Java code, my question is... is there a way to achieve this in a easy way?

最简单的方法是创建包装器共享对象。包装器共享对象将链接到 OpenSSL 库的静态版本并隐藏其所有符号。要隐藏符号,请务必指定选项 -Wl,--exclude-libs,all

如果您是从命令行工作的(而不是从 Zygote 开始的 Java Activity ),那么您可以只使用 LD_PRELOAD 技巧。但是您必须解决 Zygote 加载库的下层版本的问题。


read the documentation of all of them...

是的,没有办法绕过 RTFM :)


and create a function in C for each one...

不,您不需要导出 1 到 1。例如,您的包装器可以导出如下函数:

MY_SSL_CTX* MyCreateClientContext(...);

MY_SSL_CTX 将有效地包装 OpenSSL 的 SSL_CTX。但是 MyCreateClientContext 会聚合不同的函数调用。例如,它可能会调用:

  • SSLv23_method
  • SSL_CTX_new
  • SSL_CTX_set_verify
  • SSL_CTX_set_options
  • SSL_CTX_load_verify_locations

您可以在 OpenSSL 的 SSL/TLS Client 中看到我希望它调用的示例例子。这将包括配置上下文选项,例如 SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_COMPRESSION

关于android - OpenSSL Android NDK 的包装类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30464481/

相关文章:

c - 在 C 中访问 c​​har 中的位

android - 解决 QString 移动错误

java - 使用 Glide 使用 foreach 循环显示多个图像

android - 抽屉导航的自定义适配器

c - 无法读取 C 中的字符

c++ - 在字符串附加函数中终止 unsigned char 缓冲区的 null 的有效方法?

android - 对 NDK 中的不同库使用 ndk-build 和 cmake

java - For循环原因: VM aborting - Fatal signal 6 (SIGABRT) code=-6

android - 分享 API 不与 Facebook 分享消息

java - Android:WAITING按钮点击