我正在使用NetBeans 7.0.1和JDK 1.6 Update 24,并且在导入软件包com.sun.org.apache.xml.internal.security.utils.Base64以编码密码哈希值时使用:
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会显示实际上也存在源代码和二进制文件。
rt.jar
我曾尝试清理项目,重建项目,将源文件复制到全新的Enterprise项目中,然后以管理员身份运行NetBeans,但无济于事。任何有关如何解决此问题的线索,我们将不胜感激!
谢谢!
正如Greg的评论中指出的那样:
未来的注意事项:在Java 8中,有一个java.util.Base64程序包。
java.util.Base64
由于现在已将其实现为标准Java API的一部分,因此最好使用它代替Apache Commons Codec。考虑到这一点,我认为这应该作为答案发布。
API在类中有许多方法Base64来创建Decoderor Encoder。支持以下类型的编码器和解码器:
Base64
Decoder
Encoder
基本 -使用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
byte[] encodedArray = Base64.getEncoder().encode(someArrayToEncode);