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

IT小君   2021-12-09T03:38:22

我正在使用 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 Assists 处理类型并扩展 jar 显示源代码和二进制文件实际上也存在。

我曾尝试清理项目、重建它、将源文件复制到一个全新的企业项目并以管理员身份运行 NetBeans,但都无济于事。非常感谢有关如何解决此问题的任何线索!

谢谢!

点击广告,支持我们为你提供更好的服务
评论(3)
IT小君

com.sun.* 类不是 Java API 的一部分,您不应该依赖它们。我建议使用Apache Commons Codec来代替 Base64 编码。

2021-12-09T03:38:22   回复
IT小君

正如格雷格在对先前接受的答案的评论中指出的那样

未来注意事项:在 Java 8 中,有一个java.util.Base64包。

由于它现在作为标准 Java API 的一部分实现,因此最好使用它而不是 Apache Commons Codec。考虑到这一点,我认为这应该作为答案发布。

API 在类中有许多方法Base64来创建DecoderEncoder. 支持以下类型的编码器和解码器:

  • 基本- 使用 RFC 4648 和 RFC 2045 的表 1 中指定的“The Base64 Alphabet”进行编码和解码操作。编码器不添加任何换行(行分隔符)字符。解码器拒绝包含 base64 字母表之外的字符的数据。

  • URL 和文件名安全- 使用 RFC 4648 表 2 中指定的“URL 和文件名安全 Base64 字母表”进行编码和解码。编码器不添加任何换行(行分隔符)字符。解码器拒绝包含 base64 字母表之外的字符的数据。

  • MIME - 使用 RFC 2045 表 1 中指定的“The Base64 Alphabet”进行编码和解码操作。编码输出必须以每行不超过 76 个字符的行表示,并使用回车 '\r' 后跟换行符 '\n' 作为行分隔符。没有行分隔符添加到编码输出的末尾。在解码操作中忽略所有在 base64 字母表中找不到的行分隔符或其他字符。

因此,例如,这是创建基本编码器和对byte数组进行编码的方法

byte[] encodedArray = Base64.getEncoder().encode(someArrayToEncode);
2021-12-09T03:38:23   回复
IT小君

org.apache.commons.codec.binary.Base64使用的具体方法(如Base64.encodeBase64String()例如)取代Base64.encode

2021-12-09T03:38:23   回复