Web 管理後台需動態生成 .rdp 檔案,密碼欄位必須為 Microsoft 專有加密格式(非標準 AES),現有 C++ 實現需在 Java 服務中複用。
| 維度 | JNI (動態庫) | 獨立進程 (CLI) |
|---|---|---|
| 效能 | 極高 (記憶體內呼叫) | 進程啟動開銷大 |
| 穩定性 | C++ 崩潰導致 JVM 崩潰 | 隔離性好 |
| 部署 | 需打包 .so/.dll,跨平台麻煩 | 單一可執行檔,易分發 |
| 維護 | 需懂 C++/JNI | 僅需維護介面契約 |
建議:優先採用獨立 CLI 工具,通過 ProcessBuilder 呼叫,JSON 輸入輸出,避開 JNI 坑。
JNIEXPORT jstring JNICALL Java_com_example_RdpEncrypt_encrypt(JNIEnv*, jclass, jstring),內部呼叫既有加密邏輯,返回 NewStringUTF。g++ -shared -fPIC -I$JAVA_HOME/include -I$JAVA_HOME/include/linux RdpEncrypt.cpp -o librdpencrypt.so。System.loadLibrary("rdpencrypt");定義 native String encrypt(String plain);。.so/.dll 放入 src/main/resources/native/<os>/<arch>/,使用 maven-nar-plugin 或 jni-utils 解壓載入。Microsoft 使用 CryptProtectData (DPAPI) 配合使用者/機器憑證,無法在非 Windows 或無使用者上下文環境中離線加密。解決方案:
jpackage 打包原生庫)