人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

●質問者: makocan
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:SDK test VC++ ファイル プログラム
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● henschel
●60ポイント

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

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

ある数字について同じ数字との排他的論理和(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/)などのライブラリを使うことをお勧めします。

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ