HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0317
kaiファイルの暗号化12解決


kai

リンク

2014/3/17(Mon) 20:53:54|NO.60743

ファイルを抹消するソフトを作っていて、

ファイルを暗号化     ↓ ファイルを上書き     ↓    削除
という流れにしたいのですが、ファイルの暗号化はどうやればできますか?(複合化はできなくてもOKです)

ちなみに、ファイルの上書きのスクリプトはもうできています。

rijn.dllというものを見つけたのですが、使い方が(関数が)わからないんです・・・

rijn.dllを使う方法、その他の方法 どちらでもいいので、どなたか回答お願いします。



この記事に返信する


MillkeyStars

リンク

2014/3/17(Mon) 21:16:48|NO.60744

というか、題名と質問の内容がいまいちわからんけど、ただ抹消したいだけなら、普通に乱数データ作って書き込めばいいんじゃないの?
1バイト(256個の乱数)を扱えば、理論上暗号化よりデータ復元率は低いと思うけど。
(暗号化も普通の人が見れば、ただの乱数)

暗号化と言っても、1回だけだと復号できる可能性がある。
その為に多くの抹消ソフトは、乱数で上書きを最低でも 5 回以上行っている場合が多い。
(暗号化パターンがわかれば復号できるわけだから)

rijn.dll については、直接開発者へどうぞ。としか言えない。



kai

リンク

2014/3/17(Mon) 21:26:47|NO.60746

つまり、削除したいファイルの拡張子をtxtに変えて、乱数を256個書き込めばいいんですね?



MillkeyStars

リンク

2014/3/17(Mon) 21:34:58|NO.60747

1バイト = 0xFF なのだから、rnd(256) で乱数を作って、抹消したいファイルに対して上書きすればいい。

元々のファイルのファイルサイズが、1,250,304 Byte であるなら、1,250,304 個の乱数を作ればいい。
それを書き込めばただの乱数のファイル(上書き)ができる。



YSR

リンク

2014/3/17(Mon) 21:52:28|NO.60748

> kaiさん

 そもそも、HSPでファイルを完全抹消するプログラムを書くことは困難でしょう。
 なぜなら、原理上、ただ単にbsave・bcopy・delete命令などでファイルするだけ
ではハードディスク上のデータを完全に消し去ることは出来ないからです。
> (これは、ファイルが記憶媒体に記録される仕組みに依存します。詳しくは
> 「代替セクタ」「隠しエリア」などでググってください)

 また、データの抹消と暗号化は別の概念です。どちらもデータを読ませたくない者に
対する対策として有力ですが、「自分も読めない」と「自分で読める」といった明確な
差があります。あなたが示したrijn.dllはRijndael暗号/復号化用のDLLなので、この場合
後者に該当します。当該DLLのヘルプを読む限りでは、HSPでも十分呼び出せる仕様なようです。

と言うか実装できました。拍子抜けするぐらい簡単に。
ヘルプでは呼び出し方をDelphi流に書いてあるのでややこしいですが、
> function EncryptFile(SourceFileName,DestFileName,key : PChar) : integer; stdcall; external 'rijn.dll';
> function DecryptFile(SourceFileName,DestFileName,key : PChar) : integer; stdcall; external 'rijn.dll';
要するに引数は3つ、順に「処理前のファイル」「処理後のファイル」「パスワード」です。
ファイルは絶対パス、パスワードは普通に文字列を指定してください。
サンプルコードはあえて載せませんが、HSPの方のヘルプや当掲示板の検索機能を使えば
使い方はすぐに分かるはずです。



kai

リンク

2014/3/17(Mon) 21:59:06|NO.60749

>そもそも、HSPでファイルを完全抹消するプログラムを書くことは困難でしょう。
>なぜなら、原理上、ただ単にbsave・bcopy・delete命令などでファイルするだけ
>ではハードディスク上のデータを完全に消し去ることは出来ないからです

今考えている(NO.60743にちょっと追加)

ファイルの暗号化(ユーザーの指定回数繰り返す)    ↓ ファイルの名前の変更    ↓ 拡張子の変更    ↓ 空ファイルを作成して、上書き(ユーザーの指定回数繰り返す)
では、ファイルは抹消できないということですか?



MillkeyStars

リンク

2014/3/17(Mon) 22:13:14|NO.60750

ファイルシステム及び物理記憶装置の処理に依存する。
開かれたファイルが、番号 1 として、書き込みする時の番号が 1 とは限らないってこと。

それを対処する為に、物理的な位置でアクセスできる物(ドライバ)が必要。
ただ、多くの場合、ファイルのサイズが同等である場合、そのまま上書きされる率は高い。
(保障はできませんのであしからず)( SSD は元々 SSD 側で平均書き込みを行っているので、全体抹消でなければ無意味に近い)



kai

リンク

2014/3/17(Mon) 22:15:00|NO.60751

あと、YSRさんのrijn.dllを使ってみるソースを作ってみました。

#uselib "rijn.dll" #func EncryptFile "EncryptFile" str,str,str EncryptFile filename,filename,key
ですが、これだとパラメーターの数が違うと怒られてしまいます・・・



kai

リンク

2014/3/17(Mon) 22:16:31|NO.60752

> SSD は元々 SSD 側で平均書き込みを行っているので、全体抹消でなければ無意味に近い

僕SSD使ってるんです・・・

なんか需要がなくなってきたような・・・



kai

リンク

2014/3/17(Mon) 22:18:11|NO.60753

> SSD は元々 SSD 側で平均書き込みを行っているので、全体抹消でなければ無意味に近い

つまり、Vectorなどで公開されているファイル抹消ソフトは僕のようなSSD環境では、意味がないということですか?

なんか別の質問になっちゃってますが・・・



MillkeyStars

リンク

2014/3/17(Mon) 22:32:17|NO.60754

SSD は、SSD 自身の内部で保存する領域を変更している可能性が高い。
(開発元から提供されているソフトは例外)

Windows → SSD(9632) へアクセス要求。
SSD(9632) → SSD(1632) に位置を変更。(SSD だとここで書き換えが起こっている可能性)
SSD(1632) → Windows(9632) アクセス許可。

これは、SSDの仕様上しかたないのです。こうしないと一部分のフラッシュメモリが寿命を引き起こし
最悪の場合、一部分の為だけに、SSD 自体が故障(早期寿命)を引き起こしかねないからです。

あと、

#uselib "rijn.dll" #func EncryptFile "EncryptFile" str,str,str EncryptFile filename,filename,key
については、
#func EncryptFile "EncryptFile" sptr,sptr,sptr
です。DLL 側は、文字列ポインタを必要としているので。



kai

リンク

2014/3/17(Mon) 22:54:57|NO.60755

そうなんですかーー。



kai

リンク

2014/3/18(Tue) 06:18:32|NO.60759

SSDの寿命が縮むようなので諦めます。

でも、dllの勉強になりました。

ありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.