我使用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
)。Code助攻在类型上工作,并且展开jar显示源代码和二进制代码实际上也存在。
我尝试过清理项目,重建它,将源文件复制到一个全新的企业项目,并以管理员身份运行NetBeans,但都无济于事。任何关于如何解决这个问题的线索,非常感谢!
谢谢!
com.sun。*类不是Java API的一部分,您不应该依赖于它们。我建议使用Apache Commons Codec来做Base64编码。
正如Greg在对先前接受的答案的评论中指出的那样:
未来注意:在Java 8中,有一个
java.util.Base64
包。
由于它现在是作为标准Java API的一部分实现的,因此使用它而不是Apache Commons Codec可能更可取。考虑到这一点,我认为这应该作为一个答案发布。
API在Base64
类中有许多方法来创建Decoder
或Encoder
。支持以下类型的编码器和解码器:
-
Basic -使用RFC 4648和RFC 2045表1规定的"Base64字母表"进行编码和解码操作。编码器不添加任何换行(行分隔符)字符。解码器拒绝包含base64字母表以外的字符的数据。
-
URL和文件名安全 -使用RFC 4648表2中指定的"URL和文件名安全Base64字母表"进行编码和解码。编码器不添加任何换行(行分隔符)字符。解码器拒绝包含base64字母表以外的字符的数据。
-
MIME -使用RFC 2045表1中指定的"Base64字母表"进行编码和解码操作。编码后的输出必须以每行不超过76个字符表示,并使用回车'r'紧跟着换行'n'作为行分隔符。编码输出的末尾不添加行分隔符。在解码操作中忽略所有在base64字母表表中找不到的行分隔符或其他字符。
因此,例如,这是如何创建一个基本编码器和编码一个byte
数组:
byte[] encodedArray = Base64.getEncoder().encode(someArrayToEncode);
对于org.apache.commons.codec.binary.Base64
使用特定的方法(例如Base64.encodeBase64String()
)来替换Base64.encode