C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[9]: ini ファイルの読み方(メモリ上で)


(過去ログ 53 を表示中)

[トピック内 17 記事 (1 - 17 表示)]  << 0 >>

■29743 / inTopicNo.1)  ini ファイルの読み方(メモリ上で)
  
□投稿者/ 雲 (14回)-(2008/12/13(Sat) 10:21:32)

分類:[Windows 全般] 

現在、Win32API を使って ini ファイルの読み込みをしようと思っています。
ただ、その ini ファイルが暗号化されているため、一度、復号化してから
GetPrivateProfileString 関数で ini ファイルを読み込む必要があります。

ところが、GetPrivateProfileString の引数を見てみると、ファイル名を
引数に渡すことになっているため、この関数を使おうとすると、暗号化された
ファイルを復号化した後に、一旦、(暗号化されていないiniファイルを)
どこかに出力する必要があります。

まぁ、復号化した後、自分で、メモリ上の情報を適切にパージングしてあげれば
良い。と言えばその通りなのですが、こういう場合に使える方法ってないのかな?
と思っています。

メモリ上にあるものを、ファイルだと思いこませる方法があれば良いのかと思って
メモリマップドファイルとか見てみましたが、ちょっと、違うみたいでやり方が
思い浮かびません。

もしかすると、何か、やり方が今ひとつなのかもしれません。

アドバイスなどありましたら、ヒントだけでも頂ければと思います。

よろしくお願いします。

引用返信 編集キー/
■29745 / inTopicNo.2)  Re[1]: ini ファイルの読み方(メモリ上で)
□投稿者/ 倉田 有大 (398回)-(2008/12/13(Sat) 10:40:10)
> メモリ上にあるものを、ファイルだと思いこませる方法があれば良いのかと思って
> メモリマップドファイルとか見てみましたが、ちょっと、違うみたいでやり方が
> 思い浮かびません。
>
> もしかすると、何か、やり方が今ひとつなのかもしれません。
>
> アドバイスなどありましたら、ヒントだけでも頂ければと思います。
>
> よろしくお願いします。

おっしゃるとおりGetPrivateProfileString だとファイルしか指定できなかったはず。
複合化したあと、一度ファイルに書き出してGetPrivateProfileString かな。
後は書かれているように、複合化したファイルを自分で解析とか
すいません、それ以外は思いつかないですね〜
引用返信 編集キー/
■29747 / inTopicNo.3)  Re[1]: ini ファイルの読み方(メモリ上で)
□投稿者/ .SHO (405回)-(2008/12/13(Sat) 12:35:22)
No29743 (雲 さん) に返信

暗号化の処理って、たぶん
aaa.ini → (暗号化) → aaa.ini
ですよね。

つまり、暗号化した別のファイルは作らないはず。
(暗号化されていないファイルが残っていたら意味がないので)

って、ことで復号化の処理も

aaa.ini → (復号化) → aaa.ini

なんじゃないでしょうか?

そう考えると、GetPrivateProfileString の前に、復号化の処理を
入れるだけで良いように思えるのですが。。。
引用返信 編集キー/
■29749 / inTopicNo.4)  Re[2]: ini ファイルの読み方(メモリ上で)
□投稿者/ 雲 (15回)-(2008/12/13(Sat) 14:29:20)
No29745 (倉田 有大 さん) に返信
> おっしゃるとおりGetPrivateProfileString だとファイルしか指定できなかったはず。
> 複合化したあと、一度ファイルに書き出してGetPrivateProfileString かな。

そうですよね。それが素直に思います。

No29747 (.SHO さん) に返信
> aaa.ini → (復号化) → aaa.ini
>
> なんじゃないでしょうか?
>
> そう考えると、GetPrivateProfileString の前に、復号化の処理を
> 入れるだけで良いように思えるのですが。。。

そうだけど、そうすると、折角暗号化した ini ファイルが復号化されて
平文でファイルシステムに存在することになるので、ini ファイルの
暗号化の意味が薄れてしまうと思ったわけです。

まぁ、横着しないで自分で ini ファイルを解析しなさい。ってことでしょうね。
とほほ。> 自分。
引用返信 編集キー/
■29750 / inTopicNo.5)  Re[3]: ini ファイルの読み方(メモリ上で)
□投稿者/ .SHO (406回)-(2008/12/13(Sat) 14:46:08)
No29749 (雲 さん) に返信

> そうだけど、そうすると、折角暗号化した ini ファイルが復号化されて
> 平文でファイルシステムに存在することになるので、ini ファイルの
> 暗号化の意味が薄れてしまうと思ったわけです。

復号化して1度ファイルに書き出すのとどこが違うのかわからないですけど…

・復号化(ファイルに書き出す)
・GetPrivateProfileString
・ファイルの削除

にするか

・復号化
・GetPrivateProfileString
・暗号化

の違いですよね。
引用返信 編集キー/
■29751 / inTopicNo.6)  Re[1]: ini ファイルの読み方(メモリ上で)
□投稿者/ aetos (42回)-(2008/12/13(Sat) 15:16:47)
No29743 (雲 さん) に返信
> 現在、Win32API を使って ini ファイルの読み込みをしようと思っています。
> ただ、その ini ファイルが暗号化されているため、一度、復号化してから
> GetPrivateProfileString 関数で ini ファイルを読み込む必要があります。

それは今自分で作っているアプリなのですか?
仕様を変えられるのであれば、ini ファイル自体を暗号化するのではなく、その中の値だけ暗号化するようにするとか。
そうすれば、GetPrivateProfileString してから復号すればいいですよね。

# 「復号化」ではなく「復号」が正しいです。
引用返信 編集キー/
■29752 / inTopicNo.7)  Re[2]: ini ファイルの読み方(メモリ上で)
□投稿者/ 雲 (16回)-(2008/12/13(Sat) 15:44:39)
No29751 (aetos さん) に返信
> 仕様を変えられるのであれば、ini ファイル自体を暗号化するのではなく、その中の値だけ暗号化するようにするとか。
> そうすれば、GetPrivateProfileString してから復号すればいいですよね。

なるほど。なるほど。その方法は、気がつきませんでした。仕様の変更は可能だと思うので確認してみます。

> # 「復号化」ではなく「復号」が正しいです。
。。。すいません。素人なのがバレバレ(^^)


引用返信 編集キー/
■29753 / inTopicNo.8)  Re[3]: ini ファイルの読み方(メモリ上で)
□投稿者/ なちゃ (224回)-(2008/12/13(Sat) 15:51:27)
ところでその暗号化は何を目的にしてます?
一時的に作るファイルはファイルシステムの暗号化で我慢しとくとか。
カレントのプロセスだけがアクセスできるようなアクセス制限ってできなかったですよね…

ちなみに書き込みの時はどうやってんでしょう?
引用返信 編集キー/
■29754 / inTopicNo.9)  Re[4]: ini ファイルの読み方(メモリ上で)
□投稿者/ 雲 (17回)-(2008/12/13(Sat) 16:12:15)
No29753 (なちゃ さん) に返信
> ところでその暗号化は何を目的にしてます?

客先に ini ファイルの内容を見せたくない。というのが理由です。

> 一時的に作るファイルはファイルシステムの暗号化で我慢しとくとか。

う〜ん。でも、GetPrivateProfileString を使うときには、ファイルは、
平文でないといけないのではないでしょうか?

> カレントのプロセスだけがアクセスできるようなアクセス制限ってできなかったですよね…

アクセス制限は(たぶん)かけられるとは思います。

> ちなみに書き込みの時はどうやってんでしょう?

復号した後は、(今は)素直に fprintf なんかで書き出しています。

引用返信 編集キー/
■29755 / inTopicNo.10)  Re[5]: ini ファイルの読み方(メモリ上で)
□投稿者/ よねKEN (228回)-(2008/12/13(Sat) 16:47:20)
2008/12/13(Sat) 16:50:12 編集(投稿者)

>>ところでその暗号化は何を目的にしてます?
>
> 客先に ini ファイルの内容を見せたくない。というのが理由です。

設定値のみ暗号化の案が出ていますが、設定項目にどんなものがあるか?は知られても大丈夫なんでしょうか?
iniファイルのキー項目もあまり見せない方がよいでしょうから、設定値だけ暗号化するのではなく、
キーも暗号化した文字列を使うようにすると、どんな設定項目があるのかもわからないようにできるので、
この方針ならGetPrivateProfileStringを使って処理できますね。

引用返信 編集キー/
■29756 / inTopicNo.11)  Re[6]: ini ファイルの読み方(メモリ上で)
□投稿者/ やじゅ (856回)-(2008/12/13(Sat) 17:02:50)
やじゅ さんの Web サイト
2008/12/13(Sat) 17:05:46 編集(投稿者)

No29755 (よねKEN さん) の案に賛成です。
XMLに変更が厳しいなら
…と思ったら、回答書いてある間に内容が変わっていたた(^^;

1.ini ファイルを、ZIP形式で圧縮(暗号化の意味で)、拡張子はzipでなくてもよい
2.ZIP形式で圧縮したini ファイルをテンポラリフォルダにて解凍
3.テンポラリフォルダからini ファイルをGetPrivateProfileStringで取得
4.全内容を読み取ったら、ini ファイルを削除

引用返信 編集キー/
■29760 / inTopicNo.12)  Re[7]: ini ファイルの読み方(メモリ上で)
□投稿者/ なちゃ (225回)-(2008/12/13(Sat) 18:19:15)
利用者に見られたくないということなら、ファイルシステムでの暗号化は意味ないですね。
※これは使う側からは透過的な方法です

まあ、普通の利用者が見れないようにくらいの意味なら、一時ファイルを注意深く使用するくらいで許容範囲かも知れません。

※使い方からいって、どうせリバースエンジニアリングされたら解読されてしまうでしょうから。

引用返信 編集キー/
■29763 / inTopicNo.13)  Re[7]: ini ファイルの読み方(メモリ上で)
□投稿者/ よねKEN (230回)-(2008/12/13(Sat) 21:26:09)
No29756 (やじゅ さん) に返信
> 2008/12/13(Sat) 17:05:46 編集(投稿者)
>
> ■No29755 (よねKEN さん) の案に賛成です。
> XMLに変更が厳しいなら
> …と思ったら、回答書いてある間に内容が変わっていたた(^^;

あらら、ご覧になってましたか。まだ誰も見てないかなと思って形跡を残さずに編集してしまいました。すみません(汗
No29755 で私は最初、「XMLを使ってはどうか?」という案を記載していましたが、

No29754 の雲さんの投稿で
> 復号した後は、(今は)素直に fprintf なんかで書き出しています。

と書かれていたので、XML案は撤回しました。
(勝手に.NET Framework前提で考えてしまっていたもので(^^;)

引用返信 編集キー/
■29767 / inTopicNo.14)  Re[8]: ini ファイルの読み方(メモリ上で)
□投稿者/ 雲 (19回)-(2008/12/13(Sat) 23:28:45)
No29760 (なちゃ さん) に返信
> ※これは使う側からは透過的な方法です

そりゃそうですね。これは、書いた後に気がつきました。

> ※使い方からいって、どうせリバースエンジニアリングされたら解読されてしまうでしょうから。

ま、そういう言い方をするのであれば、そのとおりですけど。。。
引用返信 編集キー/
■29768 / inTopicNo.15)  Re[8]: ini ファイルの読み方(メモリ上で)
□投稿者/ Azulean (240回)-(2008/12/14(Sun) 00:42:58)
2008/12/14(Sun) 00:43:36 編集(投稿者)

念のために書きます。
暗号化された後の文字列が、iniで使えない文字を含まないように注意して下さい。



ここからはそもそも論になります。

人に読まれたくないのであれば、ini形式(GetPrivateProfile*で読めるフォーマット)にこだわる必要が薄い気がします。
iniって、人の目で読み取れ、編集できることを目的でしょうし。(私見)
引用返信 編集キー/
■29771 / inTopicNo.16)  Re[9]: ini ファイルの読み方(メモリ上で)
□投稿者/ なちゃ (226回)-(2008/12/14(Sun) 01:11:16)
No29767 (雲 さん) に返信
> ■No29760 (なちゃ さん) に返信
>>※使い方からいって、どうせリバースエンジニアリングされたら解読されてしまうでしょうから。
> ま、そういう言い方をするのであれば、そのとおりですけど。。。

すみません書き方が悪かったですね。
要は、利用者に絶対に読み取られてはならない、機密情報といった類の扱いではない、という意味です。
もともと本気で読み取ろうとすれば読み取ることはできてしまう情報のはずなので、それなりの対処で手を打つことは許容範囲だろう、てことです。

引用返信 編集キー/
■29773 / inTopicNo.17)  Re[9]: ini ファイルの読み方(メモリ上で)
□投稿者/ 雲 (20回)-(2008/12/14(Sun) 08:54:42)
No29771 (なちゃ さん) に返信
> 要は、利用者に絶対に読み取られてはならない、機密情報といった類の扱いではない、という意味です。
> もともと本気で読み取ろうとすれば読み取ることはできてしまう情報のはずなので、それなりの対処で手を打つことは許容範囲だろう、てことです。

そうですね。純粋に機密として扱いたいときの手法としては、適切な方法とは言えないと思っています。
なので、機密性を犠牲にすることはやむを得ない。と考えています(というより、無理)。

No29768 (Azulean さん) に返信
> 人に読まれたくないのであれば、ini形式(GetPrivateProfile*で読めるフォーマット)にこだわる必要が薄い気がします。
> iniって、人の目で読み取れ、編集できることを目的でしょうし。(私見)

はい。全くおっしゃるとおり ^^;


本質的には、別の手を考えた方が良いということはわかっていたのですが、もしかすると?という淡い期待の元に
質問を出してみました。とはいえ、元々の仕様が今ひとつ(←当たり前)なことがあるということで、なかなか厳しい
ですね。

なんにしても、いろいろとアドバイスを頂けたので、もう少し考えてみます。ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -