VC++ 2008 SDKでプログラムを制作しています。


test等の文字列をファイルに保存しているのですが
メモ帳などで開くと、上記の文字列が表示されてしまいます。

第三者が内容を理解できないような
方式で保存するにはどうすればよろしいでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2009/03/16 07:12:38
  • 終了:2009/03/23 07:15:02

回答(1件)

id:henschel No.1

henschel回答回数10ベストアンサー獲得回数12009/03/20 21:49:02

ポイント60pt

真面目に暗号化するのではなく、テキストエディタで見ただけでは内容が理解できない程度に読みづらくすればいい(難読化でいい)のであれば、下記のようなコードを書けば実現できます。

書き込みを実行すると、生成されたファイルには意味不明なバイナリデータが書き込まれているはずです。

ある数字について同じ数字との排他的論理和(XOR)を取る計算を2回行うと、また同じ数字に戻るという事実を利用しています。

書き込みの例

        const char mask = 42;//鍵になる数字(適当な数字を選ぶ)
        const char text[] = "TEST DATA\n";
        const int length = sizeof(text);

        std::ofstream ofs("test.dat",std::ios::binary);
        if(ofs.is_open()){
            for(int i=0;i!=length;++i){
                const char c = text[i] ^ mask;
                ofs.write(&c,sizeof(c));
            }
        }

読み込みの例

        const char mask = 42;//鍵になる数字(適当な数字を選ぶ)
        std::vector<char> buf;

        std::ifstream ifs("test.dat",std::ios::binary);
        if(ifs.is_open()){
            while(!ifs.eof()){
                char c;
                ifs.read(&c,sizeof(c));
                c ^= mask;
                buf.push_back(c);
            }
            printf(&buf[0]);
        }

ただ、この方法で難読化したデータは入力したデータを少しずつ変更して出力されたファイルを観察すれば鍵になる数字を推測されてしまうので、ある程度の知識がある人には比較的簡単に読まれてしまいます。

もし読まれると経済的な損失が生じたりするような重要なデータなどで真面目に暗号化したいのであれば、Crypto++(http://www.cryptopp.com/)などのライブラリを使うことをお勧めします。

ただ、この場合も鍵が判明すれば解読されてしまうことに変わりはないので、プログラム中に鍵を埋め込んで毎回同じ鍵を使うというようなことをすると、プログラムの実行中に解析されて鍵が発見される恐れはあります。

コメントはまだありません

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません