ファイルロックソフト

[戻る]
Cas 2004/01/19(月) 09:24:41
よくフリーであるような、
ボタンを押したらロックするみたいな感じのソフトを
つくりたいのですが、どのようにするとロックできるのでしょうか?
CFile fin(m_text1,CFile::modeRead| CFile::typeBinary);
CFile fout(m_text2,CFile::modeCreate|CFile::modeWrite| CFile::typeBinary);
while((ct=fin.Read(ss,8000))!=0){//ssの配列にデータを確保
}
こんなかんじなのですが教えてください。

U-t 2004/01/19(月) 18:01:12
MFC であると仮定して

バイト列のロック
CFile::LockRange
CFile::UnlockRange

書込み禁止
CFile::Open("hogehoge", CFile::shareDenyWrite | ... , NULL);

読込み禁止
CFile::Open("hogehoge", CFile::shareDenyRead | ... , NULL);

読書き禁止
CFile::Open("hogehoge", CFile::shareDenyExclusive | ... , NULL);

ttp://www.vector.co.jp/soft/win95/util/se112363.html
このようなものを期待するのであれば、
暗号化・復号化アルゴリズムを勉強しないとダメですね。
# 私見ですが、これは「ロック」ではなくて、
# 「エンコード(暗号化)」だと思うんですけどね。

Cas 2004/01/20(火) 13:18:33
ヌルをつけると
3 個の引数を持つオーバーロードされた関数はありません。
とエラーがでるのですが。
どうすればよいのでしょうか。

PATIO 2004/01/20(火) 15:19:11
言わんとしている事がよくわからないですねぇ。
U-tさんの質問には答えていないようだし。
ファイルロックソフトが起動していてソフト上のボタンを押すと
対象にしているファイルが他のソフトからOpenできなくなると
考えていいのですか?
それとも、そのソフトでないと開けないようなファイルを作成する
ソフトを作りたいのでしょうか?
前者ならボタンを押したら排他指定でファイルオープンすれば良いだけだし、
後者なら暗号化のお勉強が必要になるでしょう。
兎にも角にも質問に対する答えをまず書きましょう。

ちなみにあなたが書いている例のコードにU-tさんが書かれているものを
そのまま適応しても駄目です。
あなたが呼んでいるのはCFileクラスのコンストラクタで
U-tさんが書かれているのはCFileクラスのOpenメソッドです。
この辺は、VCのHELPをちゃんと読みましょう。

Cas 2004/01/21(水) 09:12:38
すみませんでした。
私が行おうとしているのは後者です。
というのも、今作ろうとしているのはあんごう・復号ソフトなのです。
読み込んでコードかえてあんごうして復号するのはできるのですが、
あんごうしてからロック、復号してロック解除、というのが
どうすればよいか分からないのです。

ちなみに管理者制限により、上記のアドレスは開けませんでした。
あんごう、という文字でわれわれは制限をくらっているみたいなので

U-t 2004/01/21(水) 16:48:27
「ロック」の定義があいまいなんですが、
zipファイルのようにパスワードを設定するということですか?

そうであると仮定して
1. パスワード文字列を使用して暗号化・復号化を行なう。
2. ファイルのヘッダ部分にパスワードを暗号化したものを書き込む。

方法1は、パスワードクラックするのに総当りチェックを
しなければならないので、比較的強固な暗号化だと思います。
ただ、現在の暗号化・復号化ルーチンを書き換える必要があるので
手間はかかります。

方法2は、暗号化ファイルの先頭にパスワードヘッダを追加するだけなので
簡単に実装できますが、パスワードも比較的簡単に破られます。
また、EXEのパスチェック部分を書き換えればパスワードを解析する必要も
なくなりますしね;
# そこまでしてパスワードクラックをする人も少ない気がしますが;

>あんごう、という文字でわれわれは制限をくらっているみたいなので
このスレにも"暗号"という言葉が沢山出てるような気がするのですが・・・。
# CGI だとプロキシで弾かれないのですかね
## 上記のアドレスはコピペじゃアクセスできませんよ?

Cas 2004/01/22(木) 10:34:40
そうですね、まぁつまりはクリックしても
無理やりテキストソフトに入れても、開けなくするってことなのですが・・・。
上記のやり方でそのような感じにできますか?

アドレスにh足すくらいは分かりますよ。
まぁ、yahooなどでの検索であんごう(漢字限定かもしれないが)という文字は
すでに検索できない状況でして。。。
少し他の方向にネットを利用したために色々ワード制限が掛けられてしまったんですよね。
ですのでこのページも何とか読み出してます。

U-t 2004/01/22(木) 17:43:54
>無理やりテキストソフトに入れても、開けなくするってことなのですが・・・。
'開けなくする'のであれば排他処理
'開けても内容をわからなくする'のであれば暗号化

暗号化・復号化ができているのですから、
 暗号化されたデータを保存→オリジナルファイルの削除
 復号化されたデータを保存→暗号化されたファイルの削除
という処理を追加すればいいのではないでしょうか。

パスワード云々というのは、Casさんが作ったソフトを
複数の人が使用するということを前提にしていました。
自分一人で使用するのであれば、パスワードを設定する
必要性は薄れます。

何にしても、表現があいまいなので、
あなたの望む回答を得るのは難しいと思います。

>Cas 2004/01/19(月) 09:24:41
>よくフリーであるような、
>ボタンを押したらロックするみたいな感じのソフト
「ファイルロック」で検索すると、
暗号化ソフトが引っかかったので、
ロック = 暗号化?

>Cas 2004/01/21(水) 09:12:38
>私が行おうとしているのは後者です。
ロック = 暗号化 であることを肯定?
>あんごうしてからロック、復号してロック解除
暗号化してから「ロック」という処理を行ないたいということは、
ロック = 暗号化 ではない?

>Cas 2004/01/22(木) 10:34:40
>そうですね、まぁつまりはクリックしても
「ロック」という処理はパスワードの設定であることを肯定
ロック = パスワードの設定?

>無理やりテキストソフトに入れても、開けなくするってことなのですが・・・。
テキストエディタでは、基本的にどんなファイルも無理矢理開くことができるので、
排他制御を行ないたい?
ロック = 排他制御?

結局何がしたいんでしょうか?
# 長文失礼

Cas 2004/01/23(金) 09:43:45
結局は、あんごう化したファイルをパスワードで保護して開けなくしたいんですよね。
あんごう化しただけでは、改ざんされてデータが復号できなくなりますし。

PATIO 2004/01/23(金) 15:08:49
うーむ。よくわからんなぁ。

パスワード掛ければ、改ざんできないというのが良く分かりません。
パスワードと言うのはそれをちゃんと読めるソフトで開く時に必要なものなのであって
それを使ってファイルを開き、改ざんした後に再度暗号化しても復号は出来ますよね。
復号が出来なくなるような改ざんと言うのは暗号化されたファイルをバイナリエディタ
などで直接弄ったりした時のはずですからパスワードなんか掛けても全く無意味です。
なぜなら、バイナリエディタなどに放り込んで中身を弄るのにあなたが設定したパスワ
ードは全く必要ないからです。

蛇足。
>まぁ、yahooなどでの検索であんごう(漢字限定かもしれないが)という文字は
>すでに検索できない状況でして。。。
>少し他の方向にネットを利用したために色々ワード制限が掛けられてしまっ
>たんですよね。
>ですのでこのページも何とか読み出してます。

要するに学校かどこかの共有のパソコンでまずい事をしたので制限を掛けられたって
ことですよね。
共有のマシンなのでしたら使い方も考えないといけないと思いますよ。

Cas 2004/01/23(金) 15:30:32
フリーでよくみかけるソフトはそれではどうなっているのですか?
パスワードでロックをかけて改ざんされないようにしているんではないんでしょうか?

あんごうか掛けただけでは、テキストエディタなどで簡単にデータを消したり
追加したりできてしまうので、復号化は出来なくなってしまうと思うのですが。

PATIO 2004/01/23(金) 15:45:13
そうではなくて、パスワードの目的はそのファイルから情報を引き出せなくする事で
あって、改ざんさせないと言う意味ではないと言うことです。
改ざんさせないと言う目的でパスワードを使う事は意味がないといっているわけです。
暗号化すると特定のソフトで復号しないと中から情報を取り出す事が出来ませんよね。
最近の暗号化は特定のパスワードを暗号化の種に使ったりして簡単に復号できないように
していますけれど、
簡単な暗号化の場合はそのソフトがあれば簡単に復号できてしまいます。
(例えば、オリジナルの文字コードに特定の数値を足して意味不明の文章にする等々)
パスワードはその復号できるソフトがあっても簡単に復号できないようにするためのもの
なのです。

従って、あなたが言っている改ざんをさせないという目的にはむきません。
あと、パスワードを掛けたからと言ってそのパスワードを必要としないエディタで
開く場合は全く意味がないです。
パスワードはあくまでもあなたが作ったソフトでファイルを開く時に必要なのであって
ネット上で手に入るテキストエディタには全く必要がないものです。
従って画面上に意味不明の内容が表示されるだけですが、
改ざんは簡単に出来てしまいます。

ファイルに対してのアクセスを禁止するのであれば、NT系のOSのファイルシステムにある
ファイルのアクセス権を設定し、
特定のユーザーでしか開けないようにするしかないでしょう。

cas 2004/01/23(金) 16:06:48
すいません、なんかかんちがいしていました。
よーくりかいすることができました。
結局、クリックやエディタでひらけなくするロックは実現できないんでしょうか?

はっきり言って、windowsやNTのユーザ別に設定したりを使ってしまえば
十分なのですがね。
どうしてもあんごうとロックができるソフトが作りたかったもので。。。

ku 2004/01/23(金) 16:16:34
> ロックは実現できないんでしょうか?
あなたの質問を理解できないのですよ

「クリックやエディタでひらけなくする事は実現できないんでしょうか?」
と聞けば良かったのでは?
ファイルは見えているが、ファイルを開く事はできないという状態を
アプリケーションで作るのは難しいと思う
単なるアプリケーションなら、ユーザが終了させたら、それ以降は何もできませんから

とおりがかり 2004/01/23(金) 16:27:30
http://www.mtakahashi.com/cgi.cgi?10531
結局おんなじ話だし。。。

>よくフリーであるような、
>ボタンを押したらロックするみたいな感じのソフトを
って何のソフト?
「〜のソフトと同じ機能を実装したい」で終わりなのでは?

U-t 2004/01/23(金) 20:03:21
時間があったのでサンプル作ってみました。
こんな感じにしたかったのかな?

http://www.geocities.co.jp/SiliconValley/8652/download/flock.lzh

ファイルを開けないことを前提にしているので、
暗号化は行なっていません。

これをスタートアップにでも入れておけば
誰もデータを改ざんできないのではないでしょうか。

cas 2004/01/23(金) 23:00:43
すいませんがLZH形式ではありませんでしたと、
解凍エラーが。。。

てつや 2004/01/23(金) 23:12:52
> http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200401/04010047.txt
> http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200401/04010038.txt
> http://www.mtakahashi.com/cgi.cgi?10531
> http://kerochan.no-ip.com/vcsdk/bbs/view.php?id=3792
> http://www2.realint.com/cgi-bin/tarticles.cgi?pointc+12025
とりあえず、解決したなら全部に報告して下さい。

U-t 2004/01/23(金) 23:25:00
もしかしたら zip になってたかもしれません
というか、解決したならサンプルもいらないかな?
# .lzh を .zip に変えると解凍できると思います

cas 2004/01/23(金) 23:33:04
とりあえずサンプルを使用して、何とかやってみます。
これは普通にコンパイラしてDOSで動くのですか?
よかったら仕様等もお願いできますか?
すいませんがもう少しおつきあいお願いいたします。

tib 2004/01/23(金) 23:34:17
zipで解凍できました。

cas 2004/01/23(金) 23:36:18
追加ですが、このプログラムを組み込む場合iniファイルの書き換えが
必要となると思うのですが(ユーザーが入力したファイル名・pass)
iniファイルをプログラム中に書き換えるのは簡単に出来るのでしょうか?

U-t 2004/01/24(土) 02:06:11
>これは普通にコンパイラしてDOSで動くのですか?
これはあくまで Windows アプリケーションなので、
コンソールでは動作しないと思います。
# というか、コンソールだとプログラムが動いているのが丸見えです。
## ConsoleWindow を表示しないようにする設定があった気がしますが。

>iniファイルをプログラム中に書き換えるのは簡単に出来るのでしょうか?
この辺は MSDN や Google で検索してください。

>よかったら仕様等もお願いできますか?
仕事の片手間で作ったものなので、適当です。
プログラムを終了させず、排他指定で開きっ放しになっているだけです。
とりあえず、FileLock 関数と FileUnLock 関数で
ファイルを排他指定で開いています。(ファイルに関する処理はここくらいです)
その他の関数等は MSDN に記載されていると思います。

# あとは自分で調べるなりしてください。
# 特別なことはしていないと思います。

cas 2004/01/24(土) 11:08:32
最後に、ロックは電源を落とすと自動的にとけますか?

Omega 2004/01/24(土) 11:59:42
なぜ試さない?

cas 2004/01/24(土) 16:52:31
訂正。
自分がやったらとけたので、立ち上がったらまた動かないのかなぁと。

シャノン 2004/01/24(土) 18:14:17
あなたは、自分が作ったソフトがどのような挙動をするのか理解していますか?
ファイルがロックされるのは、あなたのソフトがそのファイルを排他指定で開いている
からです。あなたのソフトがそのファイルを開いている間しかロックされていません。
ならば、あなたのソフトが起動していないときはロックされているはずもありません。
パソコンの電源を落とせば、当然あなたのソフトは終了し、ロックは解けるでしょう。
パソコンを再起動したときは、あなたのソフトは勝手に起動してはくれません。つま
り、ロックはかかっていません。

パソコンの電源を落とし、再起動したあともロックをかけ続けたいのなら、パソコンが
起動したときにあなたのソフトを自動的に起動し、終了前にロックしていたファイルを
自動的に再ロックするようにしなければなりません。
…やり方くらい自分で調べてくださいね。

それとも、パソコンの電源が落ちても終了しないようなソフトをお望みですか?(笑

シャノン 2004/01/24(土) 18:19:47
>…やり方くらい自分で調べてくださいね。
答えがこのスレッドのどこかにあります。
探せますか?

cas 2004/01/24(土) 19:33:50
私ではなくU−Tさんが作成した物ですし。。。
やはり関数を使用してでは排他的でしか無理なのですね。

シャノン 2004/01/24(土) 20:39:44
>私ではなくU−Tさんが作成した物ですし。。。
先ほどの書き込みをした際に、それを書こうかどうか迷ったんです。
「失礼、あなたのプログラムじゃありませんでしたね(笑」って。
しかし、さすがにサンプルを自分なりに書き換えてみてるだろうと思い、書かないでお
きました(書かないのは U-t さんに失礼かとも思いましたが)。

まさかそういうレスがつくとは思わなかった。

>関数を使用してでは排他的でしか無理なのですね
関数ひとつで何でもできるとお思いですか?
プログラムは関数のみでできているわけではありません。

#横槍を入れるべきではありませんでした
#続きは忍耐強い方にお任せします

RiSK 2004/01/24(土) 20:59:47
> やはり関数を使用してでは排他的でしか無理なのですね。
C言語は関数で成り立っています。
それは C ではどうやっても無理だと「勝手に」決めつけた言い方です。


いくつか質問したいので、逃げないで答えて下さいね (^^

質問1:
cas さん、あなたがしたいのはこういう事ですか?

1. ファイルを暗号化する (読めないようにするため)
2. 暗号化ファイルにアクセスできないようにロックする

はい/いいえ で答えて下さい。


質問2:
あなたがロックしたいファイルは、不特定多数の人からアクセスされる可能性のある
環境にあるファイルですか? (サーバにおいてある共有ファイルか? ってことです。)

はい/いいえ で答えて下さい。


質問3:
あなたが作りたいソフトはどこで実行する予定ですか?
サーバ側ですか? クライアント側ですか?

サーバ/クライアント で答えて下さい。

... 2004/01/25(日) 06:43:25
あなたはなにか調べて実際に、ご自分でコードを書いてみたんでしょうか?
コピペしかしていないように見受けられますが?

http://www.mtakahashi.com/cgi.cgi?10531
>lockFileは共有をブロックするだけのものではないんでしょうか?
>それだったら、私がしたいこととちょっと違うんですよね。

>質問1:
>(1) CreateFile() を使う
>使い方が良く解りません。
>よかったらおしえてください。

U-t 2004/01/24(土) 02:06:11
>>とりあえず、FileLock 関数と FileUnLock 関数で
>>ファイルを排他指定で開いています。(ファイルに関する処理はここくらいです)

>自分がやったらとけたので、立ち上がったらまた動かないのかなぁと。

初めの質問の
>よくフリーであるような、
>ボタンを押したらロックするみたいな感じのソフトを
>http://www.mtakahashi.com/cgi.cgi?10531
EDと自信たっぷりに書いていますが仕様がだんだん拡張されてきていますね。


#そろそろ終わりにしませんか?
#結局ソースコートが欲しいだけみたいですし。
#こちらには書き込みをしていませんが、そろそろ先が見えてきましたので
#私はこの件から抜けます。

cas 2004/01/25(日) 18:33:59
質問1
そうです。暗号化した上でさらにアクセスできなくしたいのです。

質問2
とくに使用場所は特定していませんが、
不特定多数の人へのロックを考えています。

質問3
一応クライアント、または個人的な面での使用を考えています。

となみ 2004/01/25(日) 20:37:45
OSがNT系ならセキュリティの設定でアクセスできるユーザーを制限すれば?

Kazuki [E-Mail] 2004/01/25(日) 20:38:54
アクセスできなくって部分の表現がいまいちあいまいな気がします。
EDと同じでいいなら拡張子の変更だけでいいのでは?

RiSK 2004/01/25(日) 21:35:00
> cas 2004/01/25(日) 18:33:59
ここまででようやく cas さんがしたいことが見えてきました。
# 今後は質問されなくても情報を提示できるようにして下さいね。OK?

で、申し訳ないのですがもうちょっとお聞きします。
(前回の質問で聞くのを忘れました)

質問2-1:
[1] http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200401/04010038.txt
[2] http://www.mtakahashi.com/cgi.cgi?10531
[3] http://kerochan.no-ip.com/vcsdk/bbs/view.php?id=3792
[4] http://www2.realint.com/cgi-bin/tarticles.cgi?pointc+12025
これらの中で、あなたが書き込んだのはどれですか? 番号で答えて下さい。
(もしあなたなら、情報を結合でき、よりよいアドバイスができるかもしれません)

[X]は私です。/ [Y]は私ではありません。


質問2-2:
あなたは一人でこのソフトを開発しようとしていますか?

一人です。/ 複数人です。

cas 2004/01/26(月) 16:30:38
[[解決]]
ユーザー制限はすでにやってあるし、
それが目的ならわざわざしません。
EDと同じでいいとはいってませんし。
自分一人で開発しようとしています。
どうやら全然解決への糸口はみつからないようなので質問は終了します。
U−Tさん他多数の皆さんありがとうございました。

とっつぁん 2004/01/26(月) 17:29:46
あらあら、自分の無知を棚に上げて捨て台詞。みっともない。

無知はしょうがないとして無知なら無知なりに調べるという力を養ってほしいもんで
す。誰でもはじめは無知です。わからなければ自分で調べる。この繰り返しが自分の力
になるんですがね。
それでもわからなければそこではじめて聞く。
質問者本人は調べているつもりでしょうが...。

質問者の言葉にあいまいな点が多いので適切なアドバイスがしにくかったのでしょう。
なので逆に質問者に質問をしなくてはならなくなる。その質問に対しても...はじめに戻
る。
一言でロックとか、アクセスとかいってもこういう事やっている人または聞く人にとっ
てはいろんな意味に取れてしまう。これは経験を重ねていくにつれてわかってくると思
います。

>自分一人で開発しようとしています。
がんばってください。まずは調べる。です。

RiSK 2004/01/26(月) 17:38:28
> どうやら全然解決への糸口はみつからないようなので
糸口はたくさんあります。ただあなたが気がつかないだけです。
周りの人がせっかくアドバイスしているのに気がつけないということは、
C 及び Win32 に関する知識が乏しいからです。
基本に戻って出直してください。
# あと口の利き方も何とかした方がいいです。

> ユーザー制限はすでにやってあるし、
> それが目的ならわざわざしません。
> EDと同じでいいとはいってませんし。
> 自分一人で開発しようとしています。
と一つずつレスをつけていますが、マルチポストの件は無視ですか?
「悪かった」と少しでも思って答えられないなら、マルチにはしないことです。
# 第一、いろんな掲示板に書かれていることをまとめる能力もない

> 質問は終了します。
他の掲示板もクローズして欲しいのですが、
マルチポスト君・教えて君に期待してもだめなようです。


このスレッドを利用したみなさまへ>
教えて君にいつまでも関わったり、
言語に関係ない質問などをしたことをお詫びいたします。
以降、これを教訓としてあまりにもひどい質問者は「黙殺」させていただきます。

少なくともこのスレッドはクローズしたのでここまでとします。
みなさまお疲れさまでした。

古いスレッドには追加発言できません。