首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

openSSL使用Android的NDK问题

名词解释

  1. OpenSSL:Open Secure System Limited(现在称为 Open Software Foundation)开发的通用加密库,提供了许多加密和认证协议。
  2. Android NDK:Android Native Development Kit(NDK)是一个用于构建原生Android应用程序的C和C ++工具集。

问题

在使用Android NDK时,如何连接到OpenSSL?

解决方案

要在Android NDK中使用OpenSSL,请遵循以下步骤:

  1. 下载并构建OpenSSL库: 从OpenSSL官网下载合适的版本,并按照说明进行构建。在构建过程中,将--with-ssl选项指定为编译选项。
  2. 将OpenSSL库(例如,libssl.alibcrypto.a)链接到你的Android项目:
    • 在你的项目中的build.gradle文件中,添加以下代码:android { ... defaultConfig { ... externalNativeBuild { cmake { cppFlags "" } } } buildTypes { ... } externalNativeBuild { cmake { path "CMakeLists.txt" } } }
    • 在你的CMakeLists.txt文件中,将OpenSSL库添加到编译器选项中:cmake_minimum_required(VERSION 3.4.1)
代码语言:txt
复制
    add_library(
代码语言:txt
复制
            crypto STATIC
代码语言:txt
复制
            IMPORTED
代码语言:txt
复制
            GLOBAL
代码语言:txt
复制
            PATHS
代码语言:txt
复制
            /path/to/your/openssl/libraries/libcrypto.a
代码语言:txt
复制
        )
代码语言:txt
复制
    add_library(
代码语言:txt
复制
            ssl STATIC
代码语言:txt
复制
            IMPORTED
代码语言:txt
复制
            GLOBAL
代码语言:txt
复制
            PATHS
代码语言:txt
复制
            /path/to/your/openssl/libraries/libssl.a
代码语言:txt
复制
        )
代码语言:txt
复制
    set(OPENSSL_LIBRARIES crypto ssl)
代码语言:txt
复制
    target_link_libraries(
代码语言:txt
复制
            native-lib
代码语言:txt
复制
            ${OPENSSL_LIBRARIES}
代码语言:txt
复制
    )
代码语言:txt
复制
    ```
  1. 在你的原生代码中使用OpenSSL库:
    • 导入必要的头文件:#include <jni.h> #include <openssl/bn.h> #include <openssl/err.h> #include <openssl/asn1.h> #include <openssl/asn1t.h> #include <openssl/evp.h> #include <openssl/ec.h> #include <openssl/pem.h>
    • 定义BN_CTX,用于处理椭圆曲线加密(ECC)密钥计算:BN_CTX *ctx = BN_CTX_new();
    • 定义PEM_Writer和PEM_Reader,用于处理PEM格式数据:EVP_PKEY *pkey = EVP_PKEY_new(); PEM_Writer *writer = PEM_Writer_new(ctx); PEM_Reader *reader = PEM_Reader_new(cert_pem);
    • 加载公钥证书并读取其内容:EVP_PKEY_set1_RSA(pkey, RSA_new(), EVP_PKEY_assign_RSA(pkey, rsa)); RSA *rsa = EVP_PKEY_get0_RSA(pkey);
    • 将证书内容写入PEM文件:PEM_write_RSAPrivateKey(writer, rsa, EVP_des_ede3_cbc(), NULL, 0, NULL, NULL);
    • 将PEM文件写入文件:PEM_write_PrivateKey(writer, pkey, EVP_des_ede3_cbc(), NULL, 0, NULL, NULL);
    • 释放资源:PEM_Writer_free(writer); PEM_Reader_free(reader); EVP_PKEY_free(pkey); RSA_free(rsa);
  2. 使用openssl命令行工具进行验证:
    • 安装openssl:sudo apt-get install openssl
    • 验证签名:openssl x509 -noout -modulus -in server.crt.pem -CAfile root_ca.crt -text
    • 验证证书吊销列表:openssl crl -noout -text -in root_ca.crl

通过以上

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android studio 使用Debugger问题(代码中含有ndk

NDK NDK 是 Native Developmentit缩写,是Google在Android开发中提供一套用于快速创建native工程一个工具。...使用这个工具可以很方便编写和调试JNI代码。 NDK可从官网或AndroidDevTools(个人网站)下载。...以后,debug出现问题(想要调试是原来代码)。...3.解决方法: 使用网上一些方法都没有效果 最后发现需要修改Debug type(我测试是Java代码与Native无关) 再只测试Java代码时候需要选Java ?...设置完成以后,重新debug即可 总结 以上所述是小编给大家介绍Android studio 使用Debugger问题(代码中含有ndk),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家

1.2K10

Android NDK 开发中快速定位 Crash 问题

Android NDK 开发中,排查问题遇到最熟悉关键字非 backtrace 莫属,Linux 系统中进程 crash 后通过 backtrace 输出堆栈信息,开发者就是基于这些堆栈信息来定位代码问题...当然定位 Native 层代码问题最优方式还是通过 IDE(AS、VS)或者 GDB 进行 debug 断点调试,本文利用一个非常简单 case 说明 Native 层定位 crash 一般流程。...我们也可以借助于 ASAN (注意 Android 版本)进行定位,具体可以参考文章:用 Asan 提前解决 NDK 疑难 crash 写两行代码,先制造一个简单 crash 场景。...D:\NDK>D:\NDK\android-ndk-r16\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin\aarch64...另外在使用 addr2line 过程中经常会遇到 “??:?” 或 “??

1.2K30

Android NDK层发起HTTP请求问题及解决

本次给大家带来何老师最新文章~虽然何老师还在过节,但依然放心不下广大开发者,在此佳节还未结束之际,给大家带来最新技术分享~ 事件起因不说了,总之是需要实现一个 NDK网络请求。...在实际使用中,的确可以通过引入 fcl-web 来完成跨平台网络请求,然而在 Android 端实际测试时,却发生了奇怪错误。...比如说请求我自己服务器 www.rarnu.com,会发生以下错误: ? 而当我换用 IP 地址来请求时,却是可以成功。 输入域名是实际存在,可以排除掉域名本身问题。...而使用 adb shell 连入设备,并使用 ping 命令访问该域名,也是正常。 那么问题可能就出在,找不到 nameserver。...最后,把上面的 InitResolver 改一下,使其可以正常加载工作于 Android这段代码: ? 编译运行程序,Error resolving host 问题即得到了解决。

1.2K20

Android NDK 开发】Kotlin 语言中使用 NDK ( 创建支持 Kotlin NDK 项目 | Kotlin 语言中使用 NDK 要点 | 代码示例 )

文章目录 一、创建支持 Kotlin NDK 项目 二、Kotlin 语言中使用 NDK 要点 1、加载动态库 2、声明 ndk 方法 3、Project 下 build.gradle 配置 4..., 弹出以下对话框 , 选择 Native C++ 项目 , 点击 Next 按钮 ; 在后续对话框中 , 使用默认 Kotlin 语言 , 即可生成 Kotlin 中使用 NDK 代码 ;...默认 C++ 标准即可 ; 二、Kotlin 语言中使用 NDK 要点 ---- 1、加载动态库 ---- Kotlin 中在类 companion object 伴生对象 中加载动态库 , 类似于...build.gradle 配置 ---- 在 Module 下 build.gradle 中 , kotlin-android 是必须配置 , kotlin-android-extensions 是扩展..., 选择性配置 , 配置了之后 , 可以很方便地使用视图绑定 ; kotlin-kapt 也是选择性配置 , 配置使用注解 ; plugins { id 'com.android.application

86800

Android NDK开发扫盲及最新CMake编译使用

本篇文章旨在简介 AndroidNDK 是什么以及重点讲解最新 Android Studio 编译工具 CMake 使用 1 NDK 简介 -------- 在介绍 NDK 之前还是首推 Android...官方文档分别从以下几个方面介绍了 NDK NDK 基础概念 如何编译 NDK 项目 ABI 是什么以及不同 CPU 指令集支持哪些 ABI 如何使用您自己及其他预建库 本节将会对文档进行总结和补充。...Android SO文件兼容和适配 当我们开发 Android 应用时候,由于 Java 代码运行在虚拟机上,所以我们从来没有关心过这方面的问题。...Android NDK 官网使用现有库文档中还是使用 ndk-build + Android.mk + Application.mk 组合说明文档。...以上文档资料仅为了解决 NDK 开发过程中编译配置问题,具体 c/c++ 逻辑编写、jni等不在此范畴。

2.1K30

Android NDKUI线程

概述 在Android中,UI线程是一个很重要概念。我们对UI更新和一些系统行为,都必须在UI线程(主线程)中进行调用。...同时,我们在进行底层跨平台开发时,我们会选择NDK,在Linux系统上进行开发。在Linux中是没有主线程这一概念。...我们一般方法是: result = env->FindClass(name); 但如果在子线程中获取时,就会出现找不到类情况。关于这一问题,详见StackOverFlow。...简单来讲,当我们在自己创建子线程想要通过JVM获取Class时,Android会为我们启动系统ClassLoader而不是我们AppClassLoader。...这样,我们只需要在子线程中,以一定编码格式向主线程发送消息,即可完成在native中切换主线程能力。 --- 如有问题,欢迎指正。

2.4K40

音视频平凡之路之FFmpeg编译全过程

FFmpeg 首先要下载一下FFmpeg库文件: git clone https://github.com/FFmpeg/FFmpeg 然后切换到n4.0.3 tag 分支,这个分支我试过,交叉编译是没有问题...编译工具:android-ndk-r14b FFmpeg有很多配置选项,你可以直接使用./configure --help查看一下,后续你在编译时候通过在这里面查找一下编译参数。 ?...很想把这些库合成一个动态库,这样既能压缩文件,使用时候有非常方便。好在ndk中提供了strip工具可以压缩库文件。 #!...-lcrypto 老openssl使用‘SSL_library_init’初始化, 新版本openssl使用OPENSSL_init_ssl’初始化; 下面正常编译就没有问题了;生成ffmpeg...3.FFmpeg接入x264 FFmpeg自带h264库性能一般,一般还是使用VideoLan实验室x264库。

4.9K41

openssl部分使用例子

你也可以指定自己配置文件。 当前只有三个OpenSSL命令会使用这个配置文件:ca, req, x509。有望未来版本会有更多命令使用配置文件。...签名时候,对于DSA生成私匙必须要和DSS1(即SHA1)搭配。而对于RSA生成私匙,任何消息摘要算法都可使用。...需要特别指出是,尽量避免使用ECB模式,要想安全地使用它难以置信地困难。 enc命令用来访问对称密码,此外还可以用密码名字作为命令来访问。...OpenSSL 0.9.5 提供了dhparam命令用来生成参数集,但是生成公钥匙和私钥匙命令dh和gendh已不推荐使用。未来版本可能会加上这个功能。...如果没有设置,则HOME目录下.rnd文件将会使用OpenSSL还提供了一个命令rand用来指定重置来源文件。来源文件之间以操作系统文件分割字符隔开。

27110

Android 安全】DEX 加密 ( 代理 Application 开发 | 交叉编译 OpenSSL 开源库 )

---- OpenSSL 是开源密码库 , 其中封装了常用 密码算法 , 常用密钥 , 证书封装管理 , SSL 协议 ; SSL : 全称 Secure Sockets Layer , 安全套接层协议..., 提供网络中保密传输功能 ; 参考简介 : 百度百科-OpenSSL OpenSSL 官网 : https://www.openssl.org/ OpenSSL Wiki 页面 : https:...; 需要准备两个文件 : 源码文件 : 文档中提示下载 openssl-1.0.1g.tar.gz 版本 OpenSSL , 在 https://www.openssl.org/source/old..., x86-4.6 or x86-4.8 ; 配置前到 NDK 目录下 toolchains 中查看要使用哪个版本交叉编译工具 , 该配置一定要从 NDK 目录中查找 ; _ANDROID_EABI...=`pwd`/android/arm 编译源码 : 执行下面的代码 , 完成交叉编译工作 ; # 编译源码 make depend make all 将生成库安装到 指定目录中 ; 该步骤作用是将编译后结果

74900

详解如何使用Android Studio 进行NDK开发和调试

个人认为使用Android Studio作NDK开发是必然趋势,所以本文将简单介绍如何在Android Studio上实现NDK开发。...NDK NDK 是 Native Developmentit缩写,是Google在Android开发中提供一套用于快速创建native工程一个工具。...使用这个工具可以很方便编写和调试JNI代码。 NDK可从官网或zalou.cn下载。 Gradle Gradle 是一个基于Apache Ant和Apache Maven概念项目自动化建构工具。...使用Experimental插件进行NDK开发 使用Experimental插件必要条件 1、Gradle-2.5或更高版本 2、Android Studio 1.3 RC1或更高版本 3、Android...经过实验,答案是可以! 步骤 1、新建一个Android标准工程,并在工程设置中配置NDK路径。

2.7K10

Android NDK初步认识(Android Studio 2.2 + CMake)

序言: 做NDK开发也有一段时间了,还记得初学时候各种找大神、搜教程,最后在诸多大神帮助下,成功做出了我第一个NDK小玩意,很感谢他们,而后慢慢越入越深(keng),今天在群里看到了很多像我之前那样各种找问题的哥们...众所周知,由于Android 应用层类都市以Java写, 这些Java类编译成dex形式bytecode之后,必须依靠Dalvik虚拟机(vm)来执行。...3.实践步骤 本文是基于 Android Studio 2.2+CMake实现, 如果你不是的话也可以做个参考,仅限参考,出事概不负责哦。...首先去新建一个Android项目,注意填写好名称,下面的勾勾不要打。 然后填写完成之后,点击下一步,这个时候如果你是新手的话,就什么也不要选,有经验我就不多说了。...然后点击确定你就会看到出现了一个新文件夹(cpp): 然后选中此文件夹,右键新建; 随意起个名,我们给他起一个jni,建议你也起跟我一样,后续还要进行一系列操作,以防出现不必要问题,要注意是下面勾勾也要选上

21820

Android中关于Nativa编译(NDK、JNI)一些问题

SDKC++接口由JNI实现,使用SDKC++接口游戏在集成时,SDK直接向游戏游戏提供源码编译,因此需要使用NDK完成编译。在编译和环境配置过程中经常会遇到一些问题,在此总结一下。...##NDK 环境配置: 选择 window -> preferences -> Android -> NDK,按照下图配置 ?...备注:在最新adt版本(adt-bundle-windows-x86-20140702)中没有集成ndk,游戏在Android选项中可能无法看到上述配置。...解决方法如下: 下载eclipse关于ndk插件com.android.ide.eclipse.ndk_23.0.2.1259578.jar 将下载好com.android.ide.eclipse.ndk...ADT 配置(支持native编译) 使用ADT自带Android Tools 完成配置(推荐): ADT中已经整合了关于CDT编译相关内容。

77780

Android 逆向】代码调试器开发 ( 使用 NDK ndk-build + Android.mk 编译 Android 平台代码调试器可执行应用 )

更详细配置方法 , 参考 https://developer.android.google.cn/ndk/guides/android_mk#tiv 文档 ; 完整 Android.mk 构建脚本...兼容最低版本 APP_PLATFORM := android-19 四、正式编译 ---- ndk-build 脚本用法参考 https://developer.android.google.cn...001_DevelopTools/002_Android_SDK/ndk/android-ndk-r14b-windows-x86_64/android-ndk-r14b/ndk-build.cmd NDK_PROJECT_PATH.../Application.mk 命令 , 编译 Android 平台代码调试器 ; 其中 Y:/001_DevelopTools/002_Android_SDK/ndk/android-ndk-r14b-windows-x86..._64/android-ndk-r14b/ndk-build.cmd 是 android-ndk-r14b 版本 ndk ndk-build.cmd 编译工具 , 注意不要用错版本 ; NDK_PROJECT_PATH

33420
领券