概要

ファイルを暗号化し、閲覧・解析を抑止する機能を追加します。

使用前に、必ず最新版の「RGSS***J.dll」またはRTPを用意しておいてください。
(【ツクールWeb】から入手できます。2005/10/16 時点での最新版は「RGSS102J.dll」)

このスクリプトは、現在サポートを行っておりません。

スクリーンショット

ScreenShot
暗号化前の「ReadMe.txt」。

ScreenShot
暗号化するとこんな風になります。

更新履歴

2005/06/04

新規作成。

スクリプト

KGC_FileEncryption

使用法

まずは最新版の「RGSS***J.dll」を「Game.exe」と同じフォルダに入れます。
入れなくてもRTPが最新なら動きますが、相手側のRTPが古いと駄目なので、入れておくことをお勧めします。
次にここから『AdvStl.dll』をDLし、『AdvStl.dll』を「Game.exe」と同じフォルダに入れます(他は不要)。
あとはスクリプトを導入すれば、以下の機能が使えるようになります。
(戻り値は付属の「API.txt」参照。呼び出しに失敗した場合は-1)
Stl.version
『AdvStl.dll』のバージョンを、本来の値を100倍した整数値で返す。
(V0.01 -> 1, V1.23 -> 123)
Stl.encrypt(infile, outfile, key, type)
infilekeyで暗号化してoutfileに出力する。
infileoutfileは同じファイル名を指定しても良い。
keyは暗号化パターンを指定する任意の文字列(日本語・記号もOK…のはず)。
typeは暗号化形式(下表を参照)。
Stl.decrypt(infile, outfile, key)
infilekeyで復号してoutfileに出力する。
infileoutfileは同じファイル名を指定しても良い。
keyは暗号化時と同じものを指定(違うとファイルが壊れる)。

暗号化APIの第一引数にウィンドウハンドルを指定すると、処理が終わるまで指定ウィンドウへの入力を禁止します。
…が、ちゃんとRGSS側で処理が終わるのを待っていてくれるので、0(NULL)を入れても特に問題は無さそうです。
(上記スクリプトは常に0。指定したい場合は書き換えてください)

keyが違うとファイルが壊れるのは仕様です。
(keyを内部に埋め込むと解析されやすくなるため)
そのため、keyは絶対忘れないようにしてください。

暗号化形式
type 名称(略称) 備考
0 BCMKERC2 DLL中最も強固(?)な形式。
暗号化には時間が掛かる。
1 BCMKEC2 [BCMKERC2]から、最も時間を要するステップを除いた形式。
強度はやや低いが、その分暗号化時間はかなり短い。
小さいファイルなら[BCMKERC2]、ある程度でかいファイルは[BCMKEC2]がいいかも。
ちなみに、復号時は形式を自動判別して復号します。

ReadMeに記載した通り、使用により発生した損害に関しては一切責任を負いません。

使用例

# バージョンを表示 p Stl.version / 100.0 # セーブファイル1を「試しに暗号化」というキーで暗号化 r = Stl.encrypt("Save1.rxdata", "Save1.rxdata", "試しに暗号化", 0) # 0 以外の値が返るとエラーなので、メッセージを出して終了 if r != 0 p "エラー!!" exit end # セーブファイル1を復号(元に戻す) Stl.decrypt("Save1.rxdata", "Save1.rxdata", "試しに暗号化")

↑の例だと暗号化したものをすぐ元に戻しているので、処理自体は意味がありません。
セーブファイルを解析されたくない場合は、データをセーブした直後に暗号化し、ロード直前に復号するといった方法を取ります。
(もちろん、ロード直後に再度暗号化しないと読まれてしまいます)

暗号化処理は結構時間がかかるので、巨大なファイルを暗号化するといった操作はなるべく避けてください。
(処理時間が気になるときは、[BCMKEC2]を使えば高速処理できます)

参考までに、開発用プロジェクトのセーブファイル(サイズがでかい)の暗号化時間を、 『AdvStl.dll』と『Stl32.dll』の双方について載せておきます(秒単位)。

Target: Save1.rxdata [145,397 bytes]
CPU: Intel Mobile Pentium 4 1.80GHz
RAM: 512MB 266MHz
etc.
Trial AdvStl.dll
[BCMKERC2]
AdvStl.dll
[BCMKEC2]
Stl32.dll
[BCMKERC]
1 0.521 0.140 1.241
2 0.511 0.140 1.263
3 0.510 0.141 1.302
4 0.511 0.140 1.262
5 0.511 0.140 1.242
6 0.520 0.140 1.312
7 0.511 0.150 1.252
8 0.521 0.140 1.251
9 0.521 0.151 1.211
10 0.510 0.130 1.252
Average 0.5147 0.1412 1.2588
所要時間
(比 Stl32)
40.89% 11.22% ------
高速化率 2.4457 8.9150 ------

すべてRGSSで計測しました。
(即席のベンチマークプログラムなので、あまり正確ではありません)
『AdvStl.dll(BCMKERC2)』は『Stl32.dll(BCMKERC)』と比較して140〜150%程度高速なようです。