JavaでBase64エンコード処理

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に関しては他力本願です。。


コメントを残す




Menu

HOME

 TOP