- PR -

Base64デコードによって含まれる終端コードの除去について

1
投稿者投稿内容
sistina
会議室デビュー日: 2006/11/02
投稿数: 1
投稿日時: 2006-11-02 09:46
初めて投稿させて頂きます。

目的:
Base64エンコード・デコードを使用して、CとJavaで情報の受け渡しをしています。

問題:
CでBase64エンコードされたものをJavaでBase64デコードしたいのですが、

sun.misc.BASE64Decoder#decodeBuffer(String)
org.apache.commons.codec.binary.Base64#decodeBase64(byte[])

どちらを使用しても、戻り値として取得するbyte[]に、
終端コードが含まれてしまうため、元の文字列との単純な比較ではfalseになってしまいます。

// 元の文字列
String expected = "";

// エンコードされた文字列
String target = "";

// デコードした文字列を取得
byte[] target_byte = Base64.decodeBase64(target.getBytes("UTF-8"));
if(expected.equals(new String(target_byte,"UTF-8")) return true;

生成されたtarget_byteから後ろ2バイト取り除くと、trueが返ってきますが、
強引な感じがしますので、どうにかしたいと考えています。

ご意見頂けたらと思います。

C側で生成されたbase64エンコード文字列には、終端コードが含まれていません。

以上
宜しくお願いします。
coasm
大ベテラン
会議室デビュー日: 2001/11/26
投稿数: 237
投稿日時: 2006-11-02 21:49
「終端コード」とは何ですか?

C側でBase64エンコードする際に余分なものを付けているということは?

元の文字列の例とBase64エンコード結果を例示できませんか?
加納正和
ぬし
会議室デビュー日: 2004/01/28
投稿数: 332
お住まい・勤務地: 首都圏
投稿日時: 2006-11-03 02:47
引用:


生成されたtarget_byteから後ろ2バイト取り除くと、trueが返ってきますが、
強引な感じがしますので、どうにかしたいと考えています。

C側で生成されたbase64エンコード文字列には、終端コードが含まれていません。




どっちやねん、とつっこんぢゃいますが。C側でのエンコードで終端を
含まないのに、なんでJava側のデコード時に含んじゃうの?

base64の、例えば。

MIIsldfj83w

という文字列をJavaでエンコードするなら。

MIIsldfj83w\\r\\n

ぢゃだめぢゃん。データ違うし。

MIIsldfj83w

をJava側に入力しないと。単に設計がおかしいと思うけど。「文字列」を
Java側に入力するという設計がおかしい。

え゛?設計じゃない?最近はそれぐらい指示しないと理解されない。。。

1

スキルアップ/キャリアアップ(JOB@IT)