我想使用sun.misc.BASE64Encoder包的Base64编码器,因为我需要对密码进行编码。但是,当我输入此包的导入时会生成错误。
要使用编码器代码的消息如下:
private synchronized static String hash(final String username, final String password) {
DIGEST.reset();
return new BASE64Encoder().encode(DIGEST.digest((username.toLowerCase() + password).getBytes()));
}
java中是否有一个同等的类做同样的事情?或许,有人知道如何能够获得原始课程的代码吗?
谢谢:)
答案 0 :(得分:5)
我建议你忘记sun.misc.BASE64Encoder
并使用Apache Commons Base64类。这是链接:http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html
使用sun.misc.BASE64Encoder
将导致Java 9编译错误,并且它已经在Java 8中发出警告。
要使用的正确类是Base64
包中的java.util
。
import java.util.Base64;
Base64.getDecoder().decode(...);
答案 1 :(得分:3)
请参阅this question,但恕我直言,接受的答案是错误的。您永远不希望使用未记录的类,例如以sun
开头的任何内容。原因是现在您的代码依赖于特定的JVM实现(例如,IBM JVM可能没有这个实现)。
第二个答案(票数最多)是你想要的答案。
答案 2 :(得分:2)
警告和错误之间存在很大差异,因此您需要仔细阅读消息,看看它的含义。
sun.misc中的类可以更改,但不会出现在所有JVM上。您可以使用具有BASE64编码的库来解决问题。
恕我直言你可以使用sun.misc是你了解使用该类的所有风险。但是,在您的情况下,最好避免使用sun.
和com.sun.
下的任何类
答案 3 :(得分:0)
一般情况下,Oracle建议不要打电话给#34; Sun"封装
http://www.oracle.com/technetwork/java/faq-sun-packages-142232.html
此外,在您的情况下,有一个请求将sun.misc。*的使用迁移到支持的API(JDK-8066506),它与sun.misc.BASE64Decoder有关:
sun.misc.BASE64Decoder, sun.misc.BASE64Encoder
Use java.util.Base64 @since 8 instead
来源:http://www.oracle.com/technetwork/java/faq-sun-packages-142232.html