DOBON.NET DOBON.NETプログラミング掲示板過去ログ

MP3ファイルを再生されたくない

環境/言語:[VB.NET 2002]
分類:[.NET]

mciSendString関数を使い普通にMP3ファイルを再生しているのですが、
作成したプログラムのフォルダを開くと普通にMP3ファイルが置いてあるので、
そのMP3ファイルは作成したプログラム以外でも再生できてしまいます。

作成したプログラムのみで再生できるようにするにはどうしたらよいでしょうか。
おそらく、MP3ファイルの一部分を書き換えてしまって
再生するときに元に戻すというようなことになるのだと思いますが・・・

MP3ファイルを実行ファイルに埋め込んでしまうこともできるのですが、
それをやると実行ファイル自体の容量がすごく大きくなってしまうので・・・

絶対に解読されないようにする必要はありません。
少なくとも、普通にMP3ファイルが置いてあって
誰でも簡単に再生できてしまう状態をどうにかしたいだけなので、
何かよい方法がありましたらよろしくお願いします。
拡張子を変えてしまうとか?
> 拡張子を変えてしまうとか?

さすがに拡張子を変えただけだと簡単に戻されてしまうので、
普通には再生できないように(やはりファイルを少し書き換えるとか)
できないでしょうか。
じゃあ圧縮してから拡張子を変えるとかは?めんどいかな?
■No10538に返信(smithさんの記事)
> さすがに拡張子を変えただけだと簡単に戻されてしまうので、
> 普通には再生できないように(やはりファイルを少し書き換えるとか)
> できないでしょうか。

暗号化ではだめですか?
2005/04/20(Wed) 14:54:18 編集(投稿者)

任意の文字列をキーにしてMP3ファイルを暗号化して、
再生時にはTempフォルダ等に復号化してそれを再生するとか。

ネックとしては再生時の復号化処理でレスポンスが幾らか悪くなる。
(試していないので体感できない程度かもしれませんが)
あとは再生中にTempフォルダを開かれたら生MP3ファイルを
見つけられてしまうくらいでしょうか。



はいこーんさんと被っちゃいましたネ…orz
> じゃあ圧縮してから拡張子を変えるとかは?めんどいかな?

圧縮してしまったものはどのように再生すればよいのでしょうか。
> 暗号化

暗号化ができたんですねw
少し勉強してみます。

今回作っているプログラムはただ音楽ファイルを再生しているだけなので、
復号化のせいでスタートが少し出遅れてもそれほど問題ありません。
(本当に気になるほど遅ければ問題ですがw)

いろいろやってみて、また報告します。

ただ、やはり復号化されたファイルが見えるのは少し問題あるかもしれません。
再生し終わったら削除するようにすればいくらか良いかもしれませんが・・・
■No10565に返信(smithさんの記事)
> 圧縮してしまったものはどのように再生すればよいのでしょうか。

そりゃ、解凍して再生でしょう。
パスワード付き Zip 書庫などいかが? (^^

> 復号化のせいでスタートが少し出遅れてもそれほど問題ありません。

ファイルサイズがファイルサイズですから、結構遅くなるかもしれません。
非同期でやったところでも、たかが知れてますね。
このサイトのTipsを参考にしてなんとか暗号化と復号化はできました。

> ファイルサイズがファイルサイズですから、結構遅くなるかもしれません。

再生するMP3ファイルのサイズは約3.5MBですが、
復号化は1秒未満(ほぼ一瞬)でできました。
なので、HDDの速度が遅かったりしてもそれほど問題はないと思います。

これで、普段ファイルが存在しないようにしておくことは可能になりましたが、
やはり再生中はファイルが普通に存在していることが少し問題ですね・・・
プログラムファイルとは別のフォルダに一時的に復号化して、
再生後すぐに削除すればほとんど気づかれないような気もしますが・・・
MP3ファイルの最初の何バイトかだけをてきとうに書き換えておき、
再生するときに修復しながら再生する(修復したファイルは作成されない)
ことができるような方法はないでしょうか。
市販のゲームなどはそのようにしているものもあるそうなので・・・
> MP3ファイルの最初の何バイトかだけをてきとうに書き換えておき、
> 再生するときに修復しながら再生する(修復したファイルは作成されない)
> ことができるような方法はないでしょうか。

MP3 の再生を「どうやるか」に依存します。

ファイルを読み込んで codec にデータを渡すところを自分のコードでやっているならいくらでもチャンスはあるでしょうし、そうでなければ余程ヘンテコなトリックを使わないとそんなチャンスは無いはずです。
mciSendString関数で普通に再生してるだけなので
それだとむずかしいですかねえ。

そうとうむずかしくなってしまいそうなので、あきらめます。
いろいろと教えていただきありがとうございました。
何かよい方法をご存知の方がいればまた教えてください。

DOBON.NET | プログラミング道 | プログラミング掲示板