簡體   English   中英

包com.sun.org.apache.xml.internal.security.utils.Base64不存在

[英]Package com.sun.org.apache.xml.internal.security.utils.Base64 does not exist

我正在使用NetBeans 7.0.1和JDK 1.6 Update 24,並在導入包com.sun.org.apache.xml.internal.security.utils.Base64以編碼密碼哈希時:

u.setPassword(Base64.encode(digest(password)));

但是在編譯時,我收到以下錯誤:

(omitted)\RegistrationController.java:8: package com.sun.org.apache.xml.internal.security.utils does not exist
import com.sun.org.apache.xml.internal.security.utils.Base64;

(omitted)\RegistrationController.java:94: cannot find symbol
symbol  : variable Base64
location: class RegistrationController
    u.setPassword(Base64.encode(digest(password)));
2 errors

我已經閱讀了有關同一問題的其他幾個問題,但所有問題都涉及不屬於JDK的軟件包,而這是( rt.jar )。 代碼輔助工作在類型上並擴展jar顯示源代碼和二進制文件實際上也存在。

我已經嘗試清理項目,重建它,將源文件復制到一個全新的Enterprise項目並以管理員身份運行NetBeans,但都無濟於事。 關於如何解決這個問題的任何線索非常感謝!

謝謝!

com.sun。*類不是Java API的一部分,您不應該依賴它們。 我建議使用Apache Commons Codec代替Base64編碼。

正如格雷格在對先前接受的答案的評論中指出的那樣:

未來的注意事項:在Java 8中,有一個java.util.Base64包。

由於它現在作為標准Java API的一部分實現,因此最好使用它而不是Apache Commons Codec。 考慮到這一點,我認為這應該作為答案發布。

API在Base64類中有許多方法來創建DecoderEncoder 支持以下類型的編碼器和解碼器:

  • Basic - 使用RFC 4648和RFC 2045的表1中指定的“Base64 Alphabet”進行編碼和解碼操作。 編碼器不添加任何換行(行分隔符)字符。 解碼器拒絕包含base64字母表之外的字符的數據。

  • URL和文件名安全 - 使用RFC 4648表2中指定的“URL和文件名安全Base64字母”進行編碼和解碼。 編碼器不添加任何換行(行分隔符)字符。 解碼器拒絕包含base64字母表之外的字符的數據。

  • MIME - 使用RFC 2045的表1中指定的“Base64 Alphabet”進行編碼和解碼操作。 編碼輸出必須以不超過76個字符的行表示,並使用回車符'\\ r',后面緊跟一個換行符'\\ n'作為行分隔符。 沒有行分隔符添加到編碼輸出的末尾。 在解碼操作中將忽略base64字母表中未找到的所有行分隔符或其他字符。

因此,例如,這是如何創建基本編碼器和編碼byte數組:

byte[] encodedArray = Base64.getEncoder().encode(someArrayToEncode);

使用org.apache.commons.codec.binary.Base64使用特定方法(例如Base64.encodeBase64String() )替換Base64.encode

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM