JNI(Java Native Interface)是一組API和標準,作用是實現Java和其他語言(主要是C/C++)的通信。出于運算速度等方面的考慮,一些對運算性能要求較高的算法往往是基于C/C++語言(與硬件關聯性更強)實現的。如果應用程序需要基于JAVA編程實現時,這就會有一些矛盾。此時,通過JNI技術,Java開發者可以在不了解算法內容的情況下,方便快捷的使用C/C++加密算法的動態庫,實現跨語言調用。例如有如下的應用場景:嵌入式終端要基于RSA非對稱算法完成與服務器之間的身份認證。終端通過加入加密芯片,可以快速安全實現基于RSA算法的簽名驗簽工作,但是服務器端往往不會外加加密模塊,往往會基于Openssl等開源庫來移植RSA算法,進而實現高效運算的目的。這些庫源碼大多基于C語言實現,此時Java開發者就可以借助JNI技術來封裝實現簽名等功能。
封裝步驟如下:
1. 使用java編譯器生成調用RSA 加解密,簽名驗簽的API頭文件。
2. 根據生成的頭文件和RSA的C源碼庫開源庫,生成一個供JNI接口調用的靜態庫
3. 在JAVA源碼中使用Native方法引入動態庫的API,編譯java程序
最終生成的文件結構如下圖:
SC7A{~%%4{J]%(30C9R2SL4.png
注意事項:
1. Java數據類型和本地數據類型需要做適當的轉換,對應關系如下表:
O1BDS0ZG7ER{I80@@N3JN_3.png
2.若在windows下直接使用命令行的形式,注意JDK的版本,較新的版本已經不支持javah 命令,而是使用java -h代替了。
-
封裝
+關注
關注
126文章
7916瀏覽量
142998 -
RSA算法
+關注
關注
0文章
14瀏覽量
7814 -
JNI
+關注
關注
0文章
8瀏覽量
7866
發布評論請先 登錄
相關推薦
評論