# アプリロジック暗号化 (Encrypt プラグイン)

アプリロジック暗号化 プラグインは、アプリに組み込まれている HTML5 アセットを、暗号化 ( アプリのビルド時 )・復号化 ( アプリの実行時 ) するプラグインです。

{% hint style="info" %}
このプラグインを使用するためには、対応するプランへの加入が必要となります。詳細は、 [料金プラン ](https://ja.monaca.io/pricing.html)をご確認ください。
{% endhint %}

{% hint style="info" %}
このプラグインは、カスタムビルドデバッガーではご利用できません。\
&#x20;動作検証を行う場合は、デバッグビルドを行い実機で確認する必要があります。
{% endhint %}

{% hint style="info" %}
アプリロジック暗号化プラグインを利用する場合、Androidでは、config.xmlで次のオプションは使えなくなります。

\
`<preference name="AndroidInsecureFileModeEnabled" value="true"/>`<br>
{% endhint %}

## サポート対象のプラットフォーム

* Cordova 7.1 以降
* iOS 9 以降&#x20;
  * WKWebView 対応版（ 5.0.5 以降 ）は、iOS 11 以降
  * CustomScheme 対応版（ 6.1.0 以降 ）は、iOS 11 以降
* Android 4.1 以降

{% hint style="info" %}
WKWebView、Xcode 11 以降を利用している場合は、バージョン「5.0.5」以降を使用する必要があります。
{% endhint %}

{% hint style="info" %}
Cordova 10以後の場合(Cordova-iOS 6.1.0以後)の場合は、バージョン「6.1.0」以降を使用する必要があります。
{% endhint %}

## 暗号化方式

* 暗号化方式 `AES`
* 鍵長 `256` bit

## プラグインの追加方法

1. Monaca クラウド IDE か&#x3089;**`設定 → Cordova プラグインの管理`**&#x3092;選択します。
2. *利用可能なプラグイン* 項目の `Encrypt` プラグインにカーソルを置き、`有効`ボタンをクリックします。

![](https://3046938759-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MfWrOnV1iKerkfShm9O%2F-MgOoHDWt1Q76GGPWr8j%2F-MgOoqj44atK8FYfHZxa%2Fimage.png?alt=media\&token=15005eb0-0ee0-45ad-a840-23285e121efa)

&#x20;   3\. 次に、*有効なプラグイン* 項目へ行き、先ほど追加したプラグイン上に、カーソルを置き、`設定`ボタンをクリックします。

![](https://3046938759-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MfWrOnV1iKerkfShm9O%2F-MgOoHDWt1Q76GGPWr8j%2F-MgOp0yNwS19R-5ewlor%2Fimage.png?alt=media\&token=f2823b12-bc2c-4778-8192-6014dd479ad8)

&#x20;   4\. プラグインの設定に必要なパラメーターを入力します。入力後、`OK`ボタンをクリックします。入力できるパラメーターは、次のとおりです。

| パラメーター         | 型   | 解説                                                                                                                                                                                                                                                                                         |
| -------------- | --- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `SECRET`       | 文字列 | \[ 必須 ] 暗号化に必要なパスワード ( SECRET ) を入力します。                                                                                                                                                                                                                                                    |
| `TARGETS`      | 文字列 | <p>\[ 任意 ] 暗号化対象のファイルが格納されているフォルダーを指定します。</p><p></p><ul><li><code>www</code> フォルダー ( デフォルト ) 。</li><li>複数のフォルダーを指定する場合は、<code>,</code> ( カンマ ) で区切ります。<br>例：TARGETS＝www/data,www/js</li><li>暗号化対象から外す場合は、<code>!</code> ( 感嘆符 ) を付けます。( 5.1.0 以降 )<br>例：TARGETS＝www/data,!www/js</li></ul> |
| `AUTO_DECRYPT` | 真偽値 | <p>\[ 任意 ] 「 自動復号化 」 機能を有効・無効にします。<br></p><ul><li><code>1</code>: ( デフォルト ) 自動復号化機能を有効にします。</li><li><code>0</code>: 自動復号化機能を無効にします。</li></ul>                                                                                                                                              |

![](https://3046938759-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MfWrOnV1iKerkfShm9O%2F-MgOoHDWt1Q76GGPWr8j%2F-MgOpLaEglYkeBRmkSyq%2Fimage.png?alt=media\&token=bd6c65d5-a526-4d5d-947e-b01a0a2bec7e)

## 手動での復号化

上記の 「 自動復号化 」 機能を使用する以外にも、手動でも、フォルダーの復号化を行えます。この場合、`monaca.Encrypt.setDecryptHash()` を実行するまで、対象のフォルダー ( 暗号化されているフォルダー ) は、読み込むことができません。つまり、`index.html` ファイル上で、script タグを使用しても、対象のファイルを読み込むことができません。

手動で復号化を行う場合には、次の手順に従います。

### ステップ 1 : 手動での復号化を有効にする

手動での復号化を有効にする場合、上記の手順 ( 「 プラグインの追加方法 」 の 4 番目の手順 ) で解説した `AUTO_DECRYPT` を、`0` に設定します。

### ステップ 2 : ハッシュ値を取得する

`monaca.Encrypt.setDecryptHash()` 関数 ( フォルダーの復号化用 ) を呼ぶときには、次のハッシュ値が必要となります。ハッシュ値は、次のようにして、ビルドログ上で確認できます。

1. プロジェクトをビルドします ( iOS または Android )。
2. ビルド完了後、次のような画面が表示されます。表示された画面上で、  `こちらをクリック`をクリックして、ビルドログを表示させます。

![](https://3046938759-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MfWrOnV1iKerkfShm9O%2F-MgOoHDWt1Q76GGPWr8j%2F-MgOpi0wTPvcgKxpaBOX%2Fimage.png?alt=media\&token=4aa3db64-7cfb-4d7d-9173-e9f293e809b8)

&#x20;   3\. お好きなテキストエディターを開き、ビルドログの内容をコピー&ペーストして、ハッシュ値を検索します。次の箇所が、ハッシュ値となります。

```javascript
...
Hash : [4c716d***************************************************ae9f720d]
...
```

### ステップ 3 : 復号化用の関数を実行する

ここまでの手順で、復号化用の関数を使用する準備ができました。なお、この関数は、次のように、`deviceready` イベント内で、実行する必要があります。

```javascript
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
    monaca.Encrypt.setDecryptHash(
        function() {alert('SUCESS');},
        function() {alert('FAIL');},
    "4c716d***************************************************ae9f720d"); // Hash code for decryption
}
```

{% hint style="info" %}
上記の例では、ハッシュ値を、直接、関数内に記述しています。セキュリティーを強化する場合には、適宜、処理を工夫する必要があります ( サーバー側からこの値を取得し、なんらかのパラメーターに代入し、隠してから使用するなど )。
{% endhint %}

## CustomSchemeの設定 (Cordova 10以降+本プラグイン 6.1.0以降 iOS専用)

本プラグインは、iOSの場合、単体でschemeとhostnameを設定することが可能です。(In-App アップデータプラグインとは共通です。)

まず、Cordova 10のデフォルトのscheme、hostnameを指定するための設定

```markup
<preference name="scheme" value="monaca-app"/>
<preference name="hostname" value="localhost"/>
```

は外してください。（これを指定してしまうと、ビルドエラーになります。）

`config.xml`に以下の様にschemeとhostnameを設定することができます。

```markup
<preference name="monaca:scheme" value="monacax-app"/>
<preference name="monaca:hostname" value="monacax.io"/>
```

この例では、schemeを`monacax-app`、hostnameを`monacax.io`としています。 schemeに使える文字は、[RFC 2396 Appendix A](https://datatracker.ietf.org/doc/html/rfc2396#appendix-A)にあるように

```
 scheme        = alpha *( alpha | digit | "+" | "-" | "." )
```

となります。

`monaca:scheme` と `moanca:hostname` を省略 した場合、それぞれ `monaca-plugin` と `monaca.plugin` になります。

## App Store への提出に際して

このプラグインでは、iOS SDK の暗号化ライブラリが採用されているため、アプリを App Store に提出し審査を受ける際、特別な設定が求められます。輸出コンプライアンス情報 において、次のとおり回答してください。

<figure><img src="https://3046938759-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MfWrOnV1iKerkfShm9O%2Fuploads%2FFM3FkesEqaRwor137eMf%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202023-05-02%2022.50.10.png?alt=media&#x26;token=8d48bf06-a8f2-4d7b-b163-9bda71a69640" alt=""><figcaption></figcaption></figure>

## バージョン履歴

<table><thead><tr><th width="150">バージョン</th><th>変更点</th></tr></thead><tbody><tr><td>7.1.0</td><td>cordova-ios 7.1.0に対応</td></tr><tr><td>6.2.3</td><td>大文字のスキーム、ホスト名を自動で小文字して認識                                     </td></tr><tr><td>6.2.2</td><td>外部サイトからjsonファイルを取得するときの不具合を修正</td></tr><tr><td>6.2.0</td><td>cordova-android10系以降に対応 (cordova-android 9系サポート終了)</td></tr><tr><td>6.1.0</td><td>CustomSchemeに対応</td></tr><tr><td>6.0.0</td><td>Cordova10サポート（Cordova9 サポート終了)</td></tr></tbody></table>

## プライバシーマニフェスト

このプラグインで必要となるプライバシーマニフェストは以下のようになります。(cordova-ios 7.1.0以上)

```xml
<platform name="ios">
  <privacy-manifest>
    <key>NSPrivacyTracking</key>
    <false/>
    <key>NSPrivacyTrackingDomains</key>
    <array/>
    <key>NSPrivacyAccessedAPITypes</key>
    <array>
    <dict>
      <key>NSPrivacyAccessedAPIType</key>
      <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
      <key>NSPrivacyAccessedAPITypeReasons</key>
      <array>
      <string>CA92.1</string>
      </array>
    </dict>
    </array>
    <key>NSPrivacyCollectedDataTypes</key>
    <array/>
  </privacy-manifest>
</platform>
```

マニフェストの記述方法について詳しくは [https://ja.docs.monaca.io/release\_notes/ios-privacy-manifest#puraibashmanifesutono](https://ja.docs.monaca.io/release_notes/ios-privacy-manifest) を参照して下さい。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ja.docs.monaca.io/reference/power_plugins/html5_resource_encryption.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
