7

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

5 回答 5

10

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


更新(2017 年 6 月 7 日)

在 Java 9 中使用sun.misc.BASE64Encoder会导致编译错误,并且在 Java 8 中已经给出警告。

要使用的正确类Base64java.util包中。

例子:

import java.util.Base64;

Base64.getDecoder().decode(...);
于 2011-12-26T21:58:54.840 回答
5

为此,Java 中没有“公开可用”(可以这么说)类。考虑使用包含 base64 实现的 Apache Commons Codec 包。主页在这里:http ://commons.apache.org/codec/ 。

您直接使用sun.*com.sun.*打包,风险自负。不保证向后兼容性。

于 2011-12-26T21:56:50.380 回答
3

看到这个问题,但恕我直言,接受的答案是错误的。你永远不想像任何以sun. 原因是现在您的代码依赖于特定的 JVM 实现(例如,IBM JVM 可能没有这个)。

第二个答案(得票最多)是您想要的答案。

于 2011-12-26T21:46:31.100 回答
2

一般来说,Oracle 建议不要调用“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

于 2018-03-01T15:32:20.853 回答
1

警告和错误之间有很大的区别,因此您需要仔细阅读消息以了解其内容。

sun.misc 中的类可以更改并且不会出现在所有 JVM 上。您正在使用具有 BASE64 编码的库。

恕我直言,您可以使用 sun.misc 是您了解使用该类的所有风险。但是,在您的情况下,最好避免在sun.and下使用任何类com.sun.

于 2011-12-26T21:46:59.823 回答