首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java DES 加密使用 BASE64Encoder 找不到類:JDK 1.8 移除內部 API 的解決方案

     編輯:程式設計綜合問答

現象

項目使用 sun.misc.BASE64Encoder 進行 Base64 編碼,JDK 1.8 編譯報錯找不到類,添加 JRE System Library 暫時可行但不久後失效,導入 JDK 1.6 rt.jar 導致啟動卡死。

原因

sun.misc.BASE64Encoder 屬於 **JDK 內部非公共 API**,JDK 9+ 模組化後默認封裝不導出,JDK 8 雖可通過 -Xbootclasspath 或 IDE 設置訪問,但極不穩定,不建議生產使用。

標準替代方案

  1. JDK 8+ 內置 java.util.Base64 (推薦):
// 編碼
String encoded = Base64.getEncoder().encodeToString(bytes);
// 解碼
byte[] decoded = Base64.getDecoder().decode(encodedStr);
  1. Apache Commons Codec:
<dependency>
  <groupId>commons-codec</groupId>
  <artifactId>commons-codec</artifactId>
  <version>1.15</version>
</dependency>
// 使用
String encoded = Base64.encodeBase64String(bytes);
  1. 若必須兼容極舊代碼:在編譯/運行參數添加 --add-exports java.base/sun.misc=ALL-UNNAMED (JDK 9+),但屬臨時妥協。

總結

徹底替換為 java.util.Base64 或 Commons Codec,避免依賴內部 API,保證跨 JDK 版本穩定運行。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved