データを暗号化 CryptEncode 関数

関数

共通関数

CryptEncode 関数

この関数は、配列データを指定した方法で変換 (エンコード) して、変換後の大きさ (byte) を取得します。

データ型と構成・戻り値

int CryptEncode(①, ②, ③, ④);

戻り値は、引数④ (変換後の配列) の大きさ (byte) を返します。
発生するエラーについては、GetLastError関数で取得することができます。

引数 [4]

CryptEncode関数は 4個の引数で構成されます。


引数名データ型単位初期値説明
methodenumデータ変換方法 (暗号化方法)。ENUM_CRYPT_METHOD 列挙値から選択。
data[]const uchar&変換元の配列データ。
keyconst uchar&暗号化キー。データの計算手順を決める符号です。任意に設定します。この設定により変換結果が違ってきます。①のデータ変換方法によって設定する暗号化キーの長さが異なります。
resultuchar&変換後の配列データ。

使用例

CryptEncode関数による配列データの暗号化

CryptEncode関数を使って配列データを暗号化します。暗号化の方法は DES暗号化 (7バイト) とします。これにより暗号化キーは最低でも 6文字以上で設定する必要があります。

コード

// CryptEncode関数による配列データの暗号化
#property strict
void OnInit() {

   string test = "テスト";                             // 変換元データ
   string skey = "1234567";                            // 暗号化キー
   uchar arr1[];                                       // 変換前の配列
   uchar arr2[];                                       // キー配列
   uchar arr3[];                                       // 変換後の配列
   int   size;                                         // サイズ(byte)
       
   StringToCharArray(test, arr1);                      // 変換前の配列に変換元データを挿入
   StringToCharArray(skey, arr2);                      // キー配列に暗号化キーを挿入
   
   Print("①変換前データ サイズ:", ArraySize(arr1), " 変換前の配列:", CharArrayToString(arr1));
   
   size = CryptEncode(CRYPT_DES, arr1, arr2, arr3);    // エンコード実行
   
   if(size>0) {
      Print("②変換後データ サイズ:", size, " 変換後の配列:", change16(arr3));
      
      ArrayFree(arr1);                                 // 変換前の配列を初期化
      size = CryptDecode(CRYPT_DES, arr3, arr2, arr1); // デコード実行
      
      Print("③復元データ  サイズ:", size, " 変換後の配列:", CharArrayToString(arr1));
   } else {
      Print("エンコード出来ませんでした");
   }
}

string change16(uchar &arr3[]) {                       // 16進数に変換する関数
   string a;
   int c = ArraySize(arr3);
   
   for(int i=0; i < c; i++) {
      a = a + StringFormat("%.2X", arr3[i]);
   }
   return(a);
}

コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)

結果

引数①のデータ変換方法やコード上の暗号化キーを変更することで「②変換後データ」が変わりますので試してみてください。

タイトルとURLをコピーしました