Help us understand the problem. What is going on with this article?

暗号化ファイルのアーカイブ化

More than 1 year has passed since last update.

これは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" でアーカイブファイルが操作できます。(リファレンス)

しかし、これで作成したできるアーカイブファイルには元のデータがそのまま記載されています。
以下の画像は作成したアーカイブファイルを、バイナリエディタで開いたものです。

アーカイブファイル中身.png

フォルダ構成
Siv3Dアーカイブ
┗テキストファイル.txt

「Siv3Dアーカイブ」フォルダをアーカイブ化したのですが、その中の「テキストファイル.txt」に記載した文章が見えてしまっています。
このようにただアーカイブ化するだけでは、データを編集される可能性があります。

今回作成した機能

今回は、暗号化したファイルをアーカイブ化し、それからデータを読み取る機能を作成しました。
以下の画像は今回の機能でアーカイブ化したファイルをバイナリエディタで開いたものです。

暗号化アーカイブファイル中身.png

フォルダ構成
Siv3Dアーカイブ
┗テキストファイル.txt

ファイル名は見えてしまっていますが、「テキストファイル.txt」に記載した文章は意味の分からないものになっています。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away