JNI(Java Native Interface)是一組API和標(biāo)準(zhǔn),作用是實現(xiàn)Java和其他語言(主要是C/C++)的通信。出于運(yùn)算速度等方面的考慮,一些對運(yùn)算性能要求較高的算法往往是基于C/C++語言(與硬件關(guān)聯(lián)性更強(qiáng))實現(xiàn)的。如果應(yīng)用程序需要基于JAVA編程實現(xiàn)時,這就會有一些矛盾。此時,通過JNI技術(shù),Java開發(fā)者可以在不了解算法內(nèi)容的情況下,方便快捷的使用C/C++加密算法的動態(tài)庫,實現(xiàn)跨語言調(diào)用。例如有如下的應(yīng)用場景:嵌入式終端要基于RSA非對稱算法完成與服務(wù)器之間的身份認(rèn)證。終端通過加入加密芯片,可以快速安全實現(xiàn)基于RSA算法的簽名驗簽工作,但是服務(wù)器端往往不會外加加密模塊,往往會基于Openssl等開源庫來移植RSA算法,進(jìn)而實現(xiàn)高效運(yùn)算的目的。這些庫源碼大多基于C語言實現(xiàn),此時Java開發(fā)者就可以借助JNI技術(shù)來封裝實現(xiàn)簽名等功能。
封裝步驟如下:
1. 使用java編譯器生成調(diào)用RSA 加解密,簽名驗簽的API頭文件。
2. 根據(jù)生成的頭文件和RSA的C源碼庫開源庫,生成一個供JNI接口調(diào)用的靜態(tài)庫
3. 在JAVA源碼中使用Native方法引入動態(tài)庫的API,編譯java程序
最終生成的文件結(jié)構(gòu)如下圖:

SC7A{~%%4{J]%(30C9R2SL4.png
注意事項:
1. Java數(shù)據(jù)類型和本地數(shù)據(jù)類型需要做適當(dāng)?shù)霓D(zhuǎn)換,對應(yīng)關(guān)系如下表:

O1BDS0ZG7ER{I80@@N3JN_3.png
2.若在windows下直接使用命令行的形式,注意JDK的版本,較新的版本已經(jīng)不支持javah 命令,而是使用java -h代替了。
-
封裝
+關(guān)注
關(guān)注
128文章
9205瀏覽量
148290 -
RSA算法
+關(guān)注
關(guān)注
0文章
14瀏覽量
8076 -
JNI
+關(guān)注
關(guān)注
0文章
8瀏覽量
8118
發(fā)布評論請先 登錄
蜂鳥E203內(nèi)核和RSA的SOC設(shè)計
加密算法的應(yīng)用
關(guān)于蜂鳥E203內(nèi)核運(yùn)算算子K擴(kuò)展的基礎(chǔ)知識分享
NTT設(shè)計介紹
數(shù)據(jù)濾波算法的具體實現(xiàn)步驟是怎樣的?
非對稱密鑰生成和轉(zhuǎn)換規(guī)格詳解
詳解芯片封裝的工藝步驟
harmony-utils之RSA,RSA加解密
部署WoSign SSL國密RSA雙證書,實現(xiàn)國密HTTPS加密
云平臺如何部署WoSign SSL“國密RSA雙證書”
封裝基板設(shè)計的詳細(xì)步驟
FOC 算法實現(xiàn)永磁同步電機(jī)調(diào)整指南
設(shè)計SO-8封裝的詳細(xì)步驟和注意事項
RSA算法的JNI封裝步驟
評論