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

2022-09-03 10:04:21

我正在使用 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的软件包,而这是()。Code Assists适用于该类型,扩展jar可以显示源代码和二进制文件实际上也存在。rt.jar

我尝试过清理项目、重新生成项目、将源文件复制到全新的企业项目中,并以管理员身份运行 NetBeans,但都无济于事。任何关于如何解决这个问题的线索都非常值得赞赏!

谢谢!


答案 1

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


答案 2

正如Greg对先前接受的答案的评论中指出的那样:

来自未来的说明:在Java 8中,有一个包。java.util.Base64

由于它现在是作为标准Java API的一部分实现的,因此使用它而不是Apache Commons编解码器可能更可取。考虑到这一点,我认为这应该作为答案发布。

该 API 在类 Base64 中有许多方法可用于创建解码器编码器。支持以下类型的编码器和解码器:

  • 基本 - 使用 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);

推荐