結論から書くと

「こんにちは」から「rO0ABXQAD+OBk+OCk+OBq+OBoeOBrw==」
と変換されるための法則は何なのかを知りたいです。

質問が長すぎるといわれたので、以下に記載しました。
みなさま、よろしくお願いいたします。

http://www.zuikoji.com/hatena/q.txt

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2009/01/13 06:45:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:i_kumagoro No.3

回答回数170ベストアンサー獲得回数58

ポイント26pt

UTF-8で書かれた「こんにちは」という文字列をjavaでserializeし、base64でエンコードするとそうなります。

ここのコードを以下のように変更したコードで、base64でデコードする前のバイト列がresult.txtに保存されます。

import java.io.*;

class SerializeTest {
    public static void main(String[] args)
	throws IOException {
	FileOutputStream outFile = new FileOutputStream("result.txt");
	ObjectOutput out = new ObjectOutputStream(outFile);

	out.writeObject("こんにちは");
	out.flush();

	out.close();
	outFile.close();
    }
}

その他の回答2件)

id:b-wind No.1

回答回数3344ベストアンサー獲得回数440

ポイント27pt

Base64 - Wikipedia

上記ページに手順も含めてすべて書いてあります。


手順自体はシンプルなもので、逆変換も可能です。

Base64変換の手順を以下に挙げる。

1. 元データを6bitずつに分割。(6bitに満たない分は0を追加して6bitにする)

2. 各6bitの値を変換表を使って4文字ずつ変換。(4文字に満たない分は = 記号を追加して4文字にする)

id:clothespin

ありがとうございます。

http://www.zuikoji.com/hatena/q.txt

質問の続きがこちらに書いてあるのですが、

「Base64」ということは判明しています。

その後、具体的な変換の部分でつまずいています。

「rO0ABXQAD+OBk+OCk+OBq+OBoeOBrw==」をデコードすると、「(文字化けの文字列)こんにちは」となってしまいました。

なぜ文字化けするのか、変換方法が間違っているのであればどのような可能性があるのかも知りたいです。

2009/01/06 08:21:16
id:standard_one No.2

回答回数252ベストアンサー獲得回数23

ポイント27pt

変換方法はシンプルなものなので、そこで間違う可能性は低いと思います。

「こんにちは」の前に付いているデータをBASE64だという前提で元にもどしてみましたが、文字列本文とは別の何かの付加情報っぽいですよね。

1010(A) 1100(C) 1110(E) 1101(D) 0000(0) 0000(0) 0000(0) 0101(5) 0111(7) 0100(4) 0000(0) 0000(0) 0000(0) 1111(F)

※括弧内は試しに16進で読んでみた場合の値

---

ところで「あるサイト」というのは、どこでしょう?

それが解決のヒントにならないですかね?

id:i_kumagoro No.3

回答回数170ベストアンサー獲得回数58ここでベストアンサー

ポイント26pt

UTF-8で書かれた「こんにちは」という文字列をjavaでserializeし、base64でエンコードするとそうなります。

ここのコードを以下のように変更したコードで、base64でデコードする前のバイト列がresult.txtに保存されます。

import java.io.*;

class SerializeTest {
    public static void main(String[] args)
	throws IOException {
	FileOutputStream outFile = new FileOutputStream("result.txt");
	ObjectOutput out = new ObjectOutputStream(outFile);

	out.writeObject("こんにちは");
	out.flush();

	out.close();
	outFile.close();
    }
}
  • id:i_kumagoro
    すみません、
    >base64でデコードする前のバイト列
    ではなく
    >base64でエンコードする前のバイト列
    です。
    serializeされただけのもの(すなわち、「rO0ABXQAD+OBk+OCk+OBq+OBoeOBrw==」をbase64でデコードしたもの)がresult.txtに保存されます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません