sun.misc包仍然可用于java?

时间:2011-12-26 21:43:15

标签: java base64 hash encoder

我想使用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中是否有一个同等的类做同样的事情?或许,有人知道如何能够获得原始课程的代码吗?

谢谢:)

4 个答案:

答案 0 :(得分:5)

我建议你忘记sun.misc.BASE64Encoder并使用Apache Commons Base64类。这是链接:http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html


更新(6/7/2017)

使用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