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.BASE64EncoderApacheCommonsBase64クラスを使用することをお勧めします。リンクは次のとおりです:http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html


更新(2017年6月7日)

を使用sun.misc.BASE64Encoderすると、Java 9でコンパイルエラーが発生し、Java8ではすでに警告が表示されます。

使用する適切なクラスはパッケージに含まBase64れています。java.util

例:

import java.util.Base64;

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

このための「公に利用可能な」(いわば)クラスはJavaにはありません。base64の実装を含むApacheCommonsCodecパッケージの使用を検討してください。ホームページはここにあります:http://commons.apache.org/codec/

自己責任で直接使用sun.*またはパッケージ化してください。com.sun.*それらの下位互換性は保証されません。

于 2011-12-26T21:56:50.380 に答える
3

この質問を参照してくださいが、私見では受け入れられた答えは間違っています。で始まるもののように、文書化されていないクラスを使用することは決してありませんsun。これは、コードが特定のJVM実装に依存しているためです(たとえば、IBM JVMにはこれがない場合があります)。

2番目の答え(投票数が最も多い)はあなたが望むものです。

于 2011-12-26T21:46:31.100 に答える
2

一般に、「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エンコーディングを備えたライブラリを使用することはできません。

IMHO sun.miscを使用できます。これは、クラスを使用する際のすべてのリスクを理解しているためです。sun.ただし、あなたの場合、以下のクラスの使用を避ける方がはるかに良いです。com.sun.

于 2011-12-26T21:46:59.823 に答える