これはSiv3D AdventCalendar 2017 18日目の記事です。
概要
暗号化したファイルのアーカイブから、復号したデータを読み込む機能を作成しました。
また、指定したフォルダを暗号化してアーカイブファイルを作成する機能も作成しました。
ここでソースコードを公開しています。
利用方法
CryptoArchive::Create
CryptoArchive::Create(L"アーカイブ化したいフォルダパス", L"アーカイブの出力パス", AES128Key);
指定したフォルダをアーカイブ化する関数です。AES128Keyで指定した鍵で暗号化を行います。
作成したアーカイブ内の、フォルダとファイルの構成は元の構成と同じになります。
例
元フォルダの構成 Example/Siv3D-kun.png
アーカイブの構成 Example/Siv3D-kun.png
ArchiveCryptoFile
ArchiveCryptoFile file(L"アーカイブファイルパス", AES128Key);
Texture texture(file.load(L"アーカイブ内のファイルパス"));
ArchiveCryptoFileで作成したアーカイブを読み込む機能です。
コンストラクタで読み込むアーカイブファイルと鍵を指定します。
指定する鍵は、アーカイブ化する際に使用したものと同じ鍵です。
ArchiveCryptoFile::loadでアーカイブ内のファイルを読み込みます。
補足
コンストラクタでアーカイブファイルと鍵をしていない場合、loadは指定されたファイルのデータを読み込むようになります。
ArchiveCryptoFile file;
Texture texture(file.load(L"ファイルパス")); //ファイルパスで指定したファイルを読み込んでくる
この機能により、読み込み先の変更が容易になります。
//アーカイブファイルの読み込み
ArchiveCryptoFile file(L"./Example.ecp", AES128Key(0, 0));
Texture texture(file.load(L"./Example/Siv3D-kun.png")); //Example.ecpアーカイブ内のSiv3D-kun.pngを読み込む
//通常のファイルの読み込み
ArchiveCryptoFile file;
Texture texture(file.load(L"./Example/Siv3D-kun.png")); //ExampleフォルダのSiv3D-kun.pngを読み込む
以下作成した動機や、使用した機能などの説明
背景
Siv3Dで作成したプロジェクトを公開する際に、画像ファイルや設定ファイルなども一緒に添付すると思います。
しかし、ファイルの数が増えると圧縮・解凍に時間がかかったり、編集されたくないファイルを編集されるなどの問題があります。
ファイル数が増えた場合にはアーカイブファイルを作成し、編集されたくないファイルは暗号化すれば解決します。
だけど、いちいち行うのはちょっとめんどくさいので、今回それらを一括して行える機能を作成しました。
アーカイブファイルについて
Siv3Dでは "Archive::Create" と "FileArchive" でアーカイブファイルが操作できます。(リファレンス)
しかし、これで作成したできるアーカイブファイルには元のデータがそのまま記載されています。
以下の画像は作成したアーカイブファイルを、バイナリエディタで開いたものです。
フォルダ構成
Siv3Dアーカイブ
┗テキストファイル.txt
「Siv3Dアーカイブ」フォルダをアーカイブ化したのですが、その中の「テキストファイル.txt」に記載した文章が見えてしまっています。
このようにただアーカイブ化するだけでは、データを編集される可能性があります。
今回作成した機能
今回は、暗号化したファイルをアーカイブ化し、それからデータを読み取る機能を作成しました。
以下の画像は今回の機能でアーカイブ化したファイルをバイナリエディタで開いたものです。
フォルダ構成
Siv3Dアーカイブ
┗テキストファイル.txt
ファイル名は見えてしまっていますが、「テキストファイル.txt」に記載した文章は意味の分からないものになっています。