web-dev-qa-db-ja.com

バイト配列をbase64文字列に変換するjava

byte[]を使用してorg.Apache.commons.codec.binary.Base64をbase64文字列に変換しようとしています。この場合、my Javaコードは次のようになります:

 base64String = Base64.encodeBase64URLSafeString(myByteArray);

しかし、私が見ているのは、生成されたbase64文字列のいくつかの無効な文字です。ScreenShot

生成された____文字列にこれらのbase64行が表示されるのはなぜですか?有効な文字列ですか?生成された文字列の長さは4で割り切れることに注意してください。

8
Suave Nti

encodeBase64Stringを使用する代わりにencodeBase64URLSafeStringメソッドを試しましたか?

encodeBase64URLSafeString:

Base64アルゴリズムのURLセーフなバリエーションを使用してバイナリデータをエンコードしますが、出力をチャンクしません。 url-safeバリエーションは、+および/文字の代わりに-および_を出力します。

encodeBase64String:

Base64アルゴリズムを使用してバイナリデータをエンコードしますが、出力をチャンクしません。注:このメソッドの動作を、複数行のチャンク(commons-codec-1.4)から単一行の非チャンク(commons-codec-1.5)に変更しました。

ソース: org.Apache.commons.codec.binary.Base64 javadoc

使用する

String sCert = javax.xml.bind.DatatypeConverter.printBase64Binary(pk); 
1
Taran

これは役に立つかもしれません

Sun.misc.BASE64Encoder encoder = new Sun.misc.BASE64Encoder();
encoder.encode(byteArray);
1
Koti

base64には(少なくとも)2つのフレーバーがあります。元のフレーバーは英数字に加えて「+」と「/」を使用し、「urlsafe」は「-」と「_」を使用してコンテンツを作成します。 URLで囲むことができます(またはファイル名として使用できます)。

「URLセーフモード」になっているbase64エンコーダーを使用しているようです。

RLSafeString()用のApacheのjavadoc

ああ、'_'はbase64アルファベットの最後の文字であり、"____"の文字列が表示されると、0xffffffのチャンクがエンコードされていることを意味します...「AAAAAA」が表示されるのと同じように、ゼロ。

これが通常のケースであると確信したい場合は、お気に入りの16進ダンパー/エディターを選択して、バイナリ入力がどのように見えるかを確認してください。

0
PypeBros