1. 程式人生 > >用NDK呼叫Android手機自帶的openssl庫函式

用NDK呼叫Android手機自帶的openssl庫函式

目標: 目前很多Android手機已經自帶了openssl庫, 即libssl.so, libcrypto.so, 以下示例實現了APK通過NDK呼叫openssl庫函式PKCS5_PBKDF2_HMAC(金鑰生成演算法)

1) 在android工程中建立 jni目錄
2) 編輯AbcJni.java
package com.example;
public class AbcJni
{
    public native byte[] hashKey(byte[] key, byte[] salt, int count);
    static {
        System.loadLibrary("abc-jni");
    }
}
3) 編譯成功(生成AbcJni.java, 例如在bin目錄下), 利用AbcJni.class生成
javah -classpath bin/classes -d jni com.example.AbcJni
這樣會在jni目錄下生成一個com_example_AbcJni.h檔案
4) 新建abc-jni.c檔案, 實現上述的標頭檔案函式
#include <string.h>
#include <jni.h>
#include <openssl/evp.h>
#include <openssl/sha.h>


JNIEXPORT jbyteArray JNICALL Java_com_example_AbcJni_hashKey
  (JNIEnv *env, jobject thiz, jbyteArray pass, jbyteArray salt, jint count)
{
  jbyte* pJbytePass = (*env)->GetByteArrayElements(env, pass, NULL);
  char* szBytePass = (char *)pJbytePass;
  int iLenPass = (*env)->GetArrayLength(env, pass);
  jbyte* pJbyteSalt = (*env)->GetByteArrayElements(env, salt, NULL);
  char* szByteSalt = (char *)pJbyteSalt;
  int iLenSalt = (*env)->GetArrayLength(env, salt);
  int OUTSIZE = 64;
  char buf[64];
  memset( buf, 0, sizeof(buf) );
  PKCS5_PBKDF2_HMAC(
                  szBytePass,
                  iLenPass,
                  szByteSalt,
                  iLenSalt,
                  count, EVP_sha512(), OUTSIZE, buf);
  jbyteArray jarray = (*env)->NewByteArray(env, OUTSIZE);
  (*env)->SetByteArrayRegion(env, jarray, 0, OUTSIZE,buf);
   (*env)->ReleaseByteArrayElements(env, pass, pJbytePass, 0);
   (*env)->ReleaseByteArrayElements(env, salt, pJbyteSalt, 0);
  return jarray;
}
4) 編輯Android.mk, 檔案, 內容如下:LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := abc-jni
LOCAL_SRC_FILES := abc-jni.c
LOCAL_LDLIBS := -lcrypto -lssl
include $(BUILD_SHARED_LIBRARY)




5) 下載一個最新的openssl原始碼, 解壓. 假如解壓後目錄為/my/src/openssl-1.0.1k/
注: Android的SDK/NDK目錄並沒有openssl相關的標頭檔案及庫檔案, 所以我們需要從原始碼中獲取標頭檔案


6) 進入ndk中以下目錄(我使用android 4.4, platform 19), 建立標頭檔案目錄的軟連結
cd /opt/android-ndk/platforms/android-19/arch-arm/usr/include
ln -s /my/src/openssl-1.0.1k/include/openssl .

7) 從你的手機拷貝以下檔案(在/system/lib, 需要root哦)到ndk的lib目錄下:
例如, 我的手機如下:
[my]# pwd                                                                                                                                                                                                  
/system/lib
[my]# ls -la libcrypto.so libssl.so                                                                                                                                                                        
-rw-r--r-- root     root      1249844 2013-02-09 03:36 libcrypto.so
-rw-r--r-- root     root       224784 2013-02-09 03:36 libssl.so

ndk的目錄是:
/opt/android-ndk/platforms/android-19/arch-arm/usr/lib

8) 回到你的android工程
cd jni
ndk-build

如果成功, 你會發現../libs目錄多了一個子目錄, 及libabc-jni.so檔案

9) 最後你可以在你的Android java程式碼中呼叫AbcJni.java中的以下方法了:
 byte[] hashKey(byte[] key, byte[] salt, int count);

相關推薦

NDK呼叫Android手機openssl函式

目標: 目前很多Android手機已經自帶了openssl庫, 即libssl.so, libcrypto.so, 以下示例實現了APK通過NDK呼叫openssl庫函式PKCS5_PBKDF2_HMAC(金鑰生成演算法) 1) 在android工程中建立 jni目錄 2)

KEIL自己製作檔案呼叫。系統檔案不一定這種方法

Keil的lib生成個人總結   1. 生成lib 的工程可以沒有main函式,可以只有一個.c檔案,一個.c檔案中可以只有一個函式 2. 需要在lib工程中建立一個.h檔案, 必須 用extern 宣告各全域性變數和函式. 3. 呼叫lib檔案的工程中必須包括lib中的.

如何在自己的App中呼叫Android系統的安裝/解除安裝程式

AppUtils裡面寫了如何安裝和解除安裝apk(這段程式碼出自這裡:點選開啟連結~),這裡的安裝和解除安裝呼叫的是Android本身的一個安裝解除安裝,所以可能頁面不會太優雅,並不符合商業App的期望,如果要做到更優雅的實現,就要用到靜默安裝/解除安裝,這個可以參照網上教

呼叫Android系統相機拍照,從相簿中獲取圖片(相容7.0系統)

一,前言: 在日常的手機應用開發過程中,經常會遇到上傳圖片的需求,像上傳頭像之類的,這就需要呼叫系統的相機,相簿獲取照片。但是在Android 系統7.0之後認為這種操作是不安全的,這篇文章主要就是記錄7.0獲取照片遇到的問題。 二,FileProvider介紹 都

STM32F429開啟FPU,使用STDSP函式

STM32F4xx系列的晶片使用的是Cortex-M4核心,帶有DSP和FPU單元。如何開啟FPU單元,使用DSP庫函式。這是個人實踐。 Keil版本:V5.17 晶片型號:STM32F429ZGT6 1.新增庫 根據所選晶片的工作模式和運算模式,新增a

調aNDROID系統功能

ont hao123 provide music content vid uri android系統 系統 CONTENTpROVIDER%E5%9F%BA%E7%A1%80%E4%B9%8BURI http://music.hao123.com/songlist/495

Android 系統圖片裁剪功能(適配7.0、8.0、對了還有小米手機

前段時間寫了如何獲取相簿和拍照之後的照片並且進行顯示和上傳,這一次是如何進行圓形影象製作,經常看我寫的筆記的人會知道,我很懶。那麼我就懶的自定義了,目前需求就用原生的就好了,大神的輪子,我會在後面進行推薦。這篇筆記是依賴於:Android呼叫相簿、相機(相容6.0、7.0、8.0) 文

微信打開鏈接後如何自動調手機默認瀏覽器下載APP

但是 產品 caption bsp shu 默認 用戶操作 發的 跳轉 微信被認為是目前最具營銷價值的營銷渠道之一,原因很簡單,微信是目前超高活躍度的app穩穩第一名,但是在微信中點擊app下載鏈接,都是無法下載app的。因為騰訊為了自身利益,屏蔽了其他app直接在微信中下

手機的一些很實用的小程式,您都過了嗎?

大家每天都在用手機,經常會下載您所需要的APP,但是手機自帶的一些很實用的小程式,您是否忽略了呢?今天給您分享一下那些比較實用的小程式。 1. 應用雙開。一般在手機設定裡,能夠多分身出一個相同的應用程式,很多朋友一臺手機用兩個微信或QQ,您不需要來回切換賬號,這樣就很方便了。 ​   2.手

解決手機瀏覽器上,rem單位,內容超出螢幕寬度問題!(rem計算不準)

問題描述: 在H5手機頁面上,用rem單位佈局,配合js計算出一個根節點的font-size(原理是螢幕寬度乘以一個固定比例,如1/100),之後頁面中所有的px全都換算成了rem單位來寫,優點是能適

微信開啟網址後自動呼叫手機預設瀏覽器如何實現

此方法可以實現微信內建瀏覽器跳轉到手機其它瀏覽器,現在網上其它的方法都只是一個頁面,讓訪問者自己手動點右上角瀏覽器開啟,而這個不同,是可以直接自動跳轉的。 安卓訪問時可以直接自動跳轉瀏覽器;IOS就複雜一點了,需要採用遮罩提示瀏覽器開啟的方式可以跳轉。   下面是使用方式,已經做了安卓和IOS的

微信打開網址後自動調手機默認瀏覽器如何實現

準備 調用 自己 http 網上 href 它的 點擊 unity 此方法可以實現微信內置瀏覽器跳轉到手機其它瀏覽器,現在網上其它的方法都只是一個頁面,讓訪問者自己手動點右上角瀏覽器打開,而這個不同,是可以直接自動跳轉的。 安卓訪問時可以直接自動跳轉瀏覽器;IOS就復雜一點

微信打開網址後自動調手機默認瀏覽器或提示選擇瀏覽器打開如何實現

就會 但是 href 點擊 .com .cn 提高自己 資料 自動調用 最近遇到一個需求、朋友找我制作一個在微信中的聊天框,或者公眾號菜單發布一條鏈接或者二維碼,。跳出微信打開一個指定的我們自己的頁面,拿到這個需求後我們團隊分開去找資料研究方案,通過微信的開發文檔、騰訊的第

微信開啟網址後自動呼叫手機預設瀏覽器或提示選擇瀏覽器開啟如何實現

最近遇到一個需求、朋友找我製作一個在微信中的聊天框,或者公眾號選單釋出一條連結或者二維碼,。 跳出微信開啟一個指定的我們自己的頁面,拿到這個需求後我們團隊分開去找資料研究方案,通過微信的開發文件 、騰訊的第三方開發文件我們都查閱過資料但是最終只找到一些歷史性的資料也就是以前可

Android中往手機的儲存空間寫入檔案

FileOutputStream outStream = this.getContext().openFileOutput("test.txt", Context.MODE_PRIVATE); outStream.write("寫入測試資料".getBytes());

Android 使用intent開啟手機應用播放視訊,音訊,文件,還有開啟應用市場

1 開啟手機上的視訊播放器播放視訊 String url = "http://192.168.0.1/1.mp4" Intent intent = new Intent(); intent.setAc

android adteclipse無法設定ndk路徑

將 檔案“com.android.ide.eclipse.ndk_23.0.2.1259578.jar”複製到 sdk 只帶的eclipse目錄的“plugins”下面,如我的複製到"D:\Android1\adt-bundle-windows-x86_64-20140702\eclipse\plugin

android開發,APP下載成功的圖片或者視訊同時顯示在手機的相簿裡

這篇文章不是完全的原創,因為有借鑑了網上的一些資料,一個輔助類AlbumNotifyHelper.java 謝謝寫這個輔助類的大神,因為我找不到作者文章的原地址了,所以我在這裡就貼出程式碼,不直接連結原作者的文章。 1。輔助類 import android.conten

前端制作之微信小技巧__避免a標簽跳轉到手機瀏覽器

廣泛 沒有 最大 進行 發送 cli bsp 兼容 效果 隨著微信的越來越大眾化,微信的使用程度也越來越高。隨之,產生了一種新的推廣模式,即微信推廣。在這個微信的大平臺上會衍生出許許多多的推廣手段。而移動前端作為服務於手機用戶的手機網頁技術,也不可避免的加入進來。 一些

如何禁用手機的輸入法軟鍵盤

輸入 element 需求 但是 手機 active sharp 寫代碼 方法 今天在寫代碼的時候,突然遇到了這麽一個需求,不許用手機自帶的鍵盤,要用設計好的鍵盤統一起來,我一向,這丫的腦子有問題吧。但是也不是沒有道理的。可以統一起來,給用戶一種統一協調性,然後查找了許多代