JavaではBase64を扱うクラスがどうもないようです。
sun.misc.BASE64Encoderとなるものがあるそうですが、
あまり推奨されていないだとか。
まー本題に行き当たったのは以下のようなシステムを組むためです。
あるJavaのシステムから個人情報となるデータを入力
↓
上記の個人情報となるデータをあるサーバーへ暗号化して送信
↓
暗号化されたデータを受け取ったサーバー側ではphpにて復号化しDB格納
Java側でAES暗号化したものをphp側へ送ってmcrypt_decryptを使って
復号化してもうまくいかず。。
いろいろググったところ、Java側で暗号化したデータをbase64エンコードにして
php側へ送ってbase64デコードしmcrypt_decryptにて復号化、
その後パディング解除処理を行うと正常に復号化されるとの事。
そこでJavaにてbase64エンコード処理を行えないかという事にいたったわけです。
で、ググってみつけましたこちらの先人様の記事に感謝です。
Javaでbase64エンコード処理はこちらです。
private static String base64Encode( byte[] bytes ) { // バイト配列をビットパターンに変換します。 StringBuffer bitPattern = new StringBuffer(); for ( int i = 0; i < bytes.length; ++i ) { int b = bytes[i]; if ( b < 0 ) { b += 256; } String tmp = Integer.toBinaryString( b ); while ( tmp.length() < 8 ) { tmp = "0" + tmp; } bitPattern.append( tmp ); } // ビットパターンのビット数が6の倍数にするため、末尾に0を追加します。 while ( bitPattern.length() % 6 != 0 ) { bitPattern.append( "0" ); } // 変換表 final String[] table = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "/" }; // 変換表を利用して、ビットパターンを4ビットずつ文字に変換します。 StringBuffer encoded = new StringBuffer(); for ( int i = 0; i < bitPattern.length(); i += 6 ) { String tmp = bitPattern.substring( i, i + 6 ); int index = Integer.parseInt( tmp, 2 ); encoded.append( table[index] ); } // 変換後の文字数を4の倍数にするため、末尾に=を追加します。 while ( encoded.length() % 4 != 0 ) { encoded.append( "=" ); } return encoded.toString(); }
ほんとJavaに関しては他力本願です。。