【国密】Libcurl的Android库编译流程及使用详解

这篇具有很好参考价值的文章主要介绍了【国密】Libcurl的Android库编译流程及使用详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概述

本文旨在提供一个Android libcurl 国密库的编译流程和使用详解
国密算法(SM2/SM3/SM4)是中国国家密码管理局颁布的密码算法标准,用于安全通信、数字签名等领域,本文将使用libcurl库,因为它是一个广泛使用的,支持多种协议的网络传输库,所以需要将libcurl库与国密算法结合使用以实现国密通信~

ok,let’s go~

二、编译流程

本文作者环境:
Windows版本: Windows 10
Android NDK版本:r21或更高版本

1.准备环境
确保已安装 Android NDK,设置好ANDROID_NDK_HOME环境变量(此处不再赘述,基本功哈...)
2.获取GmSSL源码
git clone https://github.com/guanzhi/GmSSL.git
3.编译GmSSL

首先进入gmssl文件夹中, 然后创建 ‘build-android’文件夹, 创建该文件夹的目的在于创建编译输出文件,最后执行

./setenv-android.sh

然后运行以下命令

make clean
make
make install

ok~ 至此gmssl的编译就算完成;

4.编译Libcurl
git clone https://github.com/curl/curl.git

进入libcurl源码目录,创建编译输出文件夹,执行以下命令

cd curl
mkdir build-android
cd build-android

创建build.sh脚本文件,并将以下内容复制到文件中

#!/bin/bash

export ANDROID_NDK_HOME=你的Android_NDK路径
export GmSSL_INSTALL_DIR=你的GmSSL安装目录

API_LEVEL=21
ANDROID_ABI="armeabi-v7a with NEON"
ARCH=arm
PLATFORM=android
TOOLCHAIN=${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64

export PATH=${TOOLCHAIN}/bin:$PATH
export CC=${TOOLCHAIN}/bin/armv7a-linux-androideabi${API_LEVEL}-clang
export CXX=${TOOLCHAIN}/bin/armv7a-linux-androideabi${API_LEVEL}-clang++
export AR=${TOOLCHAIN}/bin/arm-linux-androideabi-ar
export LD=${TOOLCHAIN}/bin/arm-linux-androideabi-ld
export RANLIB=${TOOLCHAIN}/bin/arm-linux-androideabi-ranlib

../configure --host=arm-linux-androideabi \
    --enable-static --disable-shared \
    --disable-debug --disable-verbose \
    --disable-curldebug \
    --enable-http --disable-ftp --disable-file --disable-ldap --disable-ldaps --disable-rtsp --disable-proxy --disable-dict --disable-telnet --disable-tftp --disable-pop3 --disable-imap --disable-smb --disable-smtp --disable-gopher --disable-manual \
    --disable-sspi --disable-ntlm-wb --disable-tls-srp \
    --disable-crypto-auth --disable-ntlm --disable-cookies \
    --with-ssl=$GmSSL_INSTALL_DIR \
    --without-zlib \
    --without-ca-bundle --without-ca-path \
    --prefix=$(pwd)/../output/android

make
make install

最后,赋予脚本可执行权限,并执行~

chmod +x build.sh
./build.sh

此时,编译后的libcurl将位于output/android目录下~

三、使用详解

1.将编译好的libcurl库与GmSSL库添加到Android项目中:

将GmSSL库的include文件夹复制到Android项目的jni目录下
将编译好的libcurl库(libcurl.a)和GmSSL库(libcrypto.a、libssl.a)复制到Android项目的jni/libs目录下

2.创建Android.mk文件:
在jni目录下创建一个名为Android.mk的文件,将以下内容复制到文件中:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := gmssl
LOCAL_SRC_FILES := libs/libcrypto.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := ssl
LOCAL_SRC_FILES := libs/libssl.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := curl
LOCAL_SRC_FILES := libs/libcurl.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := my_native_module
LOCAL_SRC_FILES := my_native_module.c
LOCAL_STATIC_LIBRARIES := curl ssl gmssl
LOCAL_LDLIBS := -llog

include $(BUILD_SHARED_LIBRARY)

3.编写本地代码:
在my_native_module.c文件中,可以使用libcurl库和GmSSL库进行国密通信。例如,使用HTTPS GET请求:

#include <jni.h>
#include <string.h>
#include <curl/curl.h>

JNIEXPORT jstring JNICALL
Java_com_example_myapp_MainActivity_sendHttpsRequest(JNIEnv *env, jobject instance) {
    CURL *curl;
    CURLcode res;

    curl_global_init(CURL_GLOBAL_DEFAULT);
    curl = curl_easy_init();

    if (curl) {
        curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2L);

        res = curl_easy_perform(curl);
        if (res != CURLE_OK) {
            return (*env)->NewStringUTF(env, curl_easy_strerror(res));
        }

        curl_easy_cleanup(curl);
    }

    curl_global_cleanup();
    return (*env)->NewStringUTF(env, "Request completed successfully.");
}

4.在Android项目中调用本地方法:
在MainActivity.java中调用本地方法,如下所示

public class MainActivity extends AppCompatActivity {
    static {
        System.loadLibrary("my_native_module");
    }

    public native String sendHttpsRequest();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String result = sendHttpsRequest();
        Log.i("MainActivity", result);
    }
}

至此,您已成功编译Android libcurl 国密库,并在Android项目中使用它进行国密通信~

四、最后

若还有问题随时评论联系我~文章来源地址https://www.toymoban.com/news/detail-545344.html

到了这里,关于【国密】Libcurl的Android库编译流程及使用详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【LibCurl】C++使用libcurl实现HTTP POST和GET、PUT

    libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证 libcurl的官网: http://curl.haxx.se/ 库下载地址: https://github.com/curl/curl/releases/tag/curl-7_71_1 初

    2024年04月17日
    浏览(98)
  • C++ LibCurl 库的使用方法

    LibCurl是一个开源的免费的多协议数据传输开源库,该框架具备跨平台性,开源免费,并提供了包括 HTTP 、 FTP 、 SMTP 、 POP3 等协议的功能,使用 libcurl 可以方便地进行网络数据传输操作,如发送 HTTP 请求、下载文件、发送电子邮件等。它被广泛应用于各种网络应用开发中,特

    2024年02月11日
    浏览(36)
  • 解决使用 libcurl 与 Charles 抓包的问题

    在使用 C++ 发送网络请求时,利用 libcurl 是个不错的选择。然而,有时候我们需要使用 Charles 抓包工具来检查这些请求,但可能会遇到无法抓取请求包的情况,或者 libcurl 提示代理名称无法解析等问题。 要抓取 libcurl 的请求,需要设置代理。下面的代码演示了如何通过 libcu

    2024年02月05日
    浏览(50)
  • 使用libcurl请求https的get/post

    最近有个需求,需要用c++请求下我自己的服务器,周末看了一下怎么发起http请求。 官方文档见: https://curl.se/libcurl/c/example.html 官网的demo是基于c的,我用的时候报错了。下面是我写的get/post的方法,同步执行。

    2024年02月07日
    浏览(29)
  • libcurl.dll丢失怎么办?libcurl.dll丢失的解决方法

    libcurl.dll丢失怎么办?其实这也是属于dll文件缺失的一种情况,主要是libcurl.dll这个文件可能被杀毒软件给误杀了,我们只需要重新下载,修复这个dll文件就可以了,而且有多种方法,下面我们一起来了解一下怎么修复libcurl.dll 一.libcurl.dll libcurl.dll是一个系统的dll文件,如果丢

    2024年02月04日
    浏览(44)
  • libcurl:https认证控制参数简介

    目录 1 背景 2 curl命令 3 libcurl 控制参数 4 双向认证 5 参考文档         在使用浏览器访问https链接时,浏览器会自动请求网站的安全证书,并进行证书校验,以及(使用证书)参与后续的通道加密逻辑。         而使用curl(不管是curl.exe命令行工具,还是使用libcurl库)

    2024年02月16日
    浏览(38)
  • 由浅入深C系列五:使用libcurl进行基于http get/post模式的C语言交互应用开发

    大多数在linux下的开发者,都会用到curl这个命令行工具。对于进行restful api的测试等,非常方便。其实,这个工具还提供了一个C的开发库,可以很方便的在C语言开发环境下完成基于http的请求和响应交互,高效的开发基于http/smtp等的网络应用程序 下载并安装curl的开发包 开发

    2024年02月13日
    浏览(45)
  • C++ LibCurl实现Web指纹识别

    Web指纹识别是一种通过分析Web应用程序的特征和元数据,以确定应用程序所使用的技术栈和配置的技术。这项技术旨在识别Web服务器、Web应用框架、后端数据库、JavaScript库等组件的版本和配置信息。通过分析HTTP响应头、HTML源代码、JavaScript代码、CSS文件等,可以获取关于We

    2024年02月05日
    浏览(38)
  • C++ LibCurl实现Web隐藏目录扫描

    LibCurl是一个开源的免费的多协议数据传输开源库,该框架具备跨平台性,开源免费,并提供了包括HTTP、FTP、SMTP、POP3等协议的功能,使用libcurl可以方便地进行网络数据传输操作,如发送HTTP请求、下载文件、发送电子邮件等。它被广泛应用于各种网络应用开发中,特别是涉及

    2024年02月04日
    浏览(45)
  • Linux基础之HTTP协议之Libcurl

    libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。 libcurl的官网:http://curl.haxx.se/ 调用curl_global_init()初始化libcurl 调用curl_easy_init()函数得到

    2024年02月07日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包