Base 64符号化改行


概要
Base 64は文字列符号化フォーマットであり、Base 64はA-Z a-z 0-9"+"/"合計64文字で元の文字をエンコードします(パッド文字もあります"=").1文字自体が1バイト、つまり8ビットであり、Base 64符号化後の1文字は6ビットを表すことができる情報のみを表すことができる.つまり、元の文字列における3バイトの情報符号化は4バイトの情報となる.Base 64の主な役割はMIME伝送のニーズを満たすことであり、伝送中にASCIIでサポートされる可視文字である.Base 64はバイトベースの符号化であり、異なる文字セットの同じ文字でBase 64で異なる符号化が可能である
問題の説明
Base 64符号化後の文字列は復号できず、復号時にRuntimeErrorに符号化後の文字列を出力するよう促すと文字列に改行文字が存在する
テストプログラム
import it.sauronsoftware.base64.Base64;

public class TestBase64 {
    public static void main(String[] args){
        String message = "{\"begin_time\":\"2016-09-13T19:06:00+08:00\",\"end_time\":\"2016-10-29T19:06:00+08:00\",\"name\":\"testExam\",\"score\":[{\"score\":\"0\",\"qid\":\"1\"}],\"questions\":[{\"name\":\"A+B\",\"qid\":\"1\"}],\"eid\":\"1\"}";
        System.out.println(Base64.encode(message));

    }
}

プログラムしゅつりょく
eyJiZWdpbl90aW1lIjoiMjAxNi0wOS0xM1QxOTowNjowMCswODowMCIsImVuZF90aW1lIjoiMjAx
Ni0xMC0yOVQxOTowNjowMCswODowMCIsIm5hbWUiOiJ0ZXN0RXhhbSIsInNjb3JlIjpbeyJzY29y
ZSI6IjAiLCJxaWQiOiIxIn1dLCJxdWVzdGlvbnMiOlt7Im5hbWUiOiJBK0IiLCJxaWQiOiIxIn1d
LCJlaWQiOiIxIn0=

テスト結果の観察
  • base 64符号化後改行
  • が現れる
  • 改行文字列を除去すると
  • が正常に復号される.
    原因分析
    RFC 822の規定によると、BASE 64 Encoderは76文字ごとに符号化され、また、バック改行部分Base 64が符号化されたjavaライブラリを追加してこの基準に従って実行する必要がある.
    ソリューション
    Apacheのcommons-codecと交換する.jar, Base64.EncodeBase 64 String(byte[])で得られた符号化文字列は改行なし
    リファレンス
    https://segmentfault.com/q/1010000000094848 http://blog.csdn.net/uucai/article/details/45871833