2

base64へのエンコードにapacheライブラリを使用しています。しかし、今回の問題は非常に典型的なものです。私はb64でエンコードされた文字列を持っています。

MIIHSjCCBjKgAwIBAgIQQuw1emUfNRlPD/euDuzBjDANBgkqhkiG9w0BAQUFADCB"+
"5TELMAkGA1UEBhMCRVMxIDAeBgkqhkiG9w0BCQEWEWFjQGFjYWJvZ2FjaWEub3Jn

その証明書(.CER)ファイルの一部です。私はそれをデコードして再びエンコードしていますが、結果は少し異なります。結果の文字列は、

"MIIHSjCCBjKgAwIBAgIQQuw1emUfNRlPD / euDuzBjDANBgkqhkiG9w0BAQUFADA" + "/ 5TELMAkGA1UEBhMCRVMxIDAeBgkqhkiG9w0BCQEWEWFjQGFjYWJvZ2FjaWEub3

違いは、最初の行の終わりと2番目の行の始まりにあります。CBはA/に置き換えられます。

この変更により、証明書が無効になります。問題はどこにあるのでしょうか?

4

1 に答える 1

5

問題は、中間の文字列変換にあります。バイト配列のみを使用する場合は、すべて問題ありません。

public static void main(String args[]) {
        String partOfCer = "MIIHSjCCBjKgAwIBAgIQQuw1emUfNRlPD/euDuzBjDANBgkqhkiG9w0BAQUFADCB" + "5TELMAkGA1UEBhMCRVMxIDAeBgkqhkiG9w0BCQEWEWFjQGFjYWJvZ2FjaWEub3Jn";
        byte[] dec1_byte = Base64.decodeBase64(partOfCer.getBytes());
//        String dec1 = new String(dec1_byte);
        byte[] newBytes = Base64.encodeBase64(dec1_byte);
        String newStr = new String(newBytes);
        System.out.println(partOfCer);
        System.out.println(newStr);
        System.out.println(partOfCer.equals(newStr));
    }
于 2012-10-10T08:53:39.197 に答える