byte[]
を使用してorg.Apache.commons.codec.binary.Base64
をbase64文字列に変換しようとしています。この場合、my Javaコードは次のようになります:
base64String = Base64.encodeBase64URLSafeString(myByteArray);
しかし、私が見ているのは、生成されたbase64
文字列のいくつかの無効な文字です。
生成された____
文字列にこれらのbase64
行が表示されるのはなぜですか?有効な文字列ですか?生成された文字列の長さは4で割り切れることに注意してください。
encodeBase64String
を使用する代わりにencodeBase64URLSafeString
メソッドを試しましたか?
encodeBase64URLSafeString:
Base64アルゴリズムのURLセーフなバリエーションを使用してバイナリデータをエンコードしますが、出力をチャンクしません。 url-safeバリエーションは、+および/文字の代わりに-および_を出力します。
encodeBase64String:
Base64アルゴリズムを使用してバイナリデータをエンコードしますが、出力をチャンクしません。注:このメソッドの動作を、複数行のチャンク(commons-codec-1.4)から単一行の非チャンク(commons-codec-1.5)に変更しました。
使用する
String sCert = javax.xml.bind.DatatypeConverter.printBase64Binary(pk);
これは役に立つかもしれません
Sun.misc.BASE64Encoder encoder = new Sun.misc.BASE64Encoder();
encoder.encode(byteArray);
base64には(少なくとも)2つのフレーバーがあります。元のフレーバーは英数字に加えて「+」と「/」を使用し、「urlsafe」は「-」と「_」を使用してコンテンツを作成します。 URLで囲むことができます(またはファイル名として使用できます)。
「URLセーフモード」になっているbase64エンコーダーを使用しているようです。
RLSafeString()用のApacheのjavadoc
ああ、'_'
はbase64アルファベットの最後の文字であり、"____"
の文字列が表示されると、0xffffffのチャンクがエンコードされていることを意味します...「AAAAAA」が表示されるのと同じように、ゼロ。
これが通常のケースであると確信したい場合は、お気に入りの16進ダンパー/エディターを選択して、バイナリ入力がどのように見えるかを確認してください。