0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

データの暗号化および復号する方法

Last updated at Posted at 2021-01-06

目次

  1. はじめに
  2. 実装方法
  3. まとめ

はじめに

暗号化と復号化について説明します。

暗号化
データを第三者が解読できないように一定のルールのもとに変換することです。

復号
暗号化されたデータを元に戻すことです。

暗号化するケースとしてはパスワードがあげられます。
暗号化によって、権限の無い照会や使用からデータを保護します。
そこで今回はデータの暗号化および復号についてご紹介したいと思います。

実装方法

①画面の作成
このような画面を作成してみました。
image.png

上のテキストに入力し、右にある「暗号化および復号」ボタンを押すと
Output Encryptに暗号化されたデータが
Output Decryptに復号されたデータが表示されます。

②モジュールの作成
暗号化と復号をするためのモジュールを作成します。

  • encryptData.jp:暗号化および復号を行います。
  1. 左上のタブがProjectになっていることを確認し、Modulesの右側にあるボタンをクリックしてください。

  2. New JS modulesをクリックしてください。
    image.png

  3. 作成されたmoduleをリネームしてください。
    (今回は encryptData とつけています)
    image.png

encryptData.jsの設定
では、encryptData.jsに設定していきます。

encryptData.js
const encryptData= function(){
  // 暗号化
  const encryptData = function (data, key) {
    try {
      // 暗号化キーの生成
      var encryptDecryptKey = kony.crypto.newKey("passphrase", 128, {
        passphrasetext: [key],
        subalgo: "aes",
        passphrasehashalgo: "md5"
      });
      var properties = {
        padding: "pkcs5",
        mode: "cbc",
        initializationvector: "1234567890123456"
      };
      var encryptedData = kony.crypto.encrypt("aes", encryptDecryptKey, data, properties);
      return (encryptedData);
    } catch (exception) {
      kony.print(JSON.stringify(exception));
    }
  };
  // 復号
  const decryptData = function (data, key) {
    try {
      // 復号化キーの生成
      var encryptDecryptKey = kony.crypto.newKey("passphrase", 128, {
        passphrasetext: [key],
        subalgo: "aes",
        passphrasehashalgo: "md5"
      });
      var properties = {
        padding: "pkcs5",
        mode: "cbc",
        initializationvector: "1234567890123456"
      };
      var decryptedData = kony.crypto.decrypt("aes", encryptDecryptKey, data, properties);
      var clas = Object.prototype.toString.call(decryptedData).slice(8, -1);
      if(clas === "Object"){
        decryptedData = "";
      }
      return decryptedData;
    } catch (exception) {
      kony.print(JSON.stringify(exception));
    }
  };
  
    return {
    encryptData : encryptData,
    decryptData : decryptData,
  };
}();

上を説明します。
kony.crypto.newKey:このAPIを使用すると、指定したアルゴリズムを使用して暗号化用のキーを作成できます。このAPIを使用して作成されたキーは、平文(暗号化されていないデータ)の暗号化と暗号化されたデータの復号化に使用されます。
入力パラメータ(algo、keystrength、propertiesTable)について簡単に記載します。

algo:キーを作成するためのスキーム

パラメータ 説明
securerandom キーを生成するスキームとして安全な乱数を使用。このスキームは常に一意のキーを生成。
random キーを生成するためのスキームとして乱数を使用。このスキームは常に一意のキーを生成。
passphrase 同じパスフレーズの場合、常に同じキーを生成。

※ randomおよびsecurerandomはiPhoneでのみサポートされています。
※ Androidでは、securerandomとrandomの違いはありません。
※ SPAではパスフレーズのみがサポートされています。

keystrength:キーの強さを示すビット数

名称 説明
aes 可能な値は128、192、256
tripledes 可能な値は192

propertiesTable:プロパティ値

プロパティ値 説明
passphrasetext [文字列の配列]:パスフレーズ。
subalgo キーの作成に使用されるキーアルゴリズム。入力可能な値はaesとtripledes
passphrasehashlogo パスフレーズテキストに適用されるハッシュアルゴリズム。入力可能な値はmd2(キー強度128の場合)、md4(キー強度128の場合)、md5(キー強度128の場合)、sha2(キー強度256の場合)

kony.crypto.encrypt:指定されたキーとアルゴリズムを使用して入力テキストを暗号化します。
入力パラメータ(algo、generatekey、inputstring、propertiesTable)について簡単に記載します。

algo:入力文字列を暗号化する必要があるアルゴリズムを指定
入力可能な値はaes,tripledes,rsaとなります。
※ tripledesはWindowsプラットフォームではサポートされていません。

generatekey:暗号化に使用されるキー

tripledes:暗号化する必要のあるデータ

propertiesTable:プロパティ値

プロパティ値 説明
padding 適用する必要のあるパディングを示す文字列
mode 暗号化モードを表す文字列
initializationvector 使用される初期化ベクトルを示す文字列

kony.crypto.decrypt:指定されたキーとアルゴリズムを使用して入力テキストを復号します。
入力パラメータ(algo、generatekey、encryptedRawbytes、propertiesTable)について簡単に記載します。

algo:復号化するアルゴリズムを指定
入力可能な値はaes,tripledes,rsaとなります。
※ tripledesはWindowsプラットフォームではサポートされていません。

generatekey:復号化に使用されるキーを保持

encryptedRawbytes:復号化される暗号化されたテキストのrawバイトを含むオブジェクト

propertiesTable:プロパティ値

プロパティ値 説明
padding 適用する必要のあるパディングを示す文字列
mode 暗号化モードを表す文字列
initializationvector 復号化の実行に使用される初期化ベクトルを示す文字列

frmDemoController.jsの設定とアクションの紐付け
では、frmDemoController.jsを設定していきます。

frmDemoController.js
define({ 

  CONST_KEY_ENCRYPT: 'key_encrypt',
  onClickEncrypt: function () {
    var data = this.view.txtData.text;
    if (data) {
      this.view.lblOutputEncrypt.text = encryptData.encryptData(data, this.CONST_KEY_ENCRYPT);
      this.view.lblOutputDecrypt.text = encryptData.decryptData(this.view.lblOutputEncrypt.text, this.CONST_KEY_ENCRYPT);
    }
  }
 });

暗号化および復号ボタンをクリックし、ActionにあるonClickをクリックしてください。
Invoke Functionを選択し、onClickEncryptを設定しましょう。
image.png
image.png

ここまでで、データの暗号化および復号の準備が完了しました。
次に実際にどうなるかみていきましょう!

⑤実装の確認

暗号化および復号されていることが分かりますね!

まとめ

今回は、データの暗号化および復号する方法を説明しました。
暗号化しないといけないような機密データを扱う際に参考にしていただけたらと思います。
暗号化と復号もKonyでしたら可能です!
ぜひ試してみてください:wave:

参考

暗号化と復号について:
https://www.kumikomi.jp/encrypt/

kony.theme Namespaceの説明:
https://docs.kony.com/konylibrary/visualizer/viz_widget_prog_guide/Content/Button_Events.htm#onClick

kony.cryptoの説明:
https://docs.kony.com/konylibrary/visualizer/viz_api_dev_guide/content/kony.crypto_functions.htm#encrypt

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?