トップ  >  リファレンス  >  共通関数  >  CryptDecode
スポンサーリンク
検索
カスタム検索
リファレンスツリー
オススメ
CryptDecode


CryptDecode


CryptEncode()関数によってエンコードされたデータ配列をデコードします。

関数書式:
int  CryptDecode(
   ENUM_CRYPT_METHOD   method,        // メソッド
   const uchar&         data[],        // データ配列(ソース)
   const uchar&         key[],         // キー
   const uchar&         result[]       // データ配列(デコード後)
   );



■引数
引数名 初期値 I/O 詳細
method - In データ変換メソッド。
ENUM_CRYPT_METHOD列挙の値で指定します。
data[] - In デコードするデータ配列
key[] - In キー配列
result[] - Out デコード後のコピー先配列


■戻り値
result[]配列のサイズをbyte単位で返します。
エラーの場合は0を返します。
呼び出しエラーに関する情報を取得する場合は、GetLastError()関数を使用します。


サンプルソース:

void OnInit(){

    string text   ="テストデータ文字列";    // 変換元データ
    string keystr ="ABCDEFG";               // キー文字列
    uchar array_src[];
    uchar array_dst[];
    uchar array_key[];
    int   res;
    

    StringToCharArray(keystr, array_key);   // array_key配列にkeystをコピー
    StringToCharArray(text  , array_src);   // array_src配列にtextをコピー

    PrintFormat("変換前の元データ    : サイズ=%d, 文字列='%s'",ArraySize(array_src),CharArrayToString(array_src));

    //---array_key配列のDES-56bitキーで、array_src配列のデータを暗号化
    res = CryptEncode( CRYPT_DES , array_src , array_key , array_dst);

    if( res > 0 ) {
        // エンコードされた結果を表示
        PrintFormat("エンコード後のデータ: サイズ=%d, データ=%s",res,ArrayToHex(array_dst)); 

        //--- エンコードされたデータをデコード
        res = CryptDecode( CRYPT_DES ,array_dst,array_key,array_src);

        if( res > 0 ) {
           // デコードされた結果を表示
            PrintFormat("デコード後のデータ  : サイズ=%d, 文字列='%s'",ArraySize(array_src),CharArrayToString(array_src));
        } else {
            Print("デコードエラー。 エラーコード=",GetLastError());
        }
    } else {
        Print("エンコードエラー。 エラーコード =",GetLastError());
    }
}


//+------------------------------------------------------------------+
//| ucharデータ配列の全要素から、文字列(16進数表示)を作成                       
//|------------------------------------------------------------------|
string ArrayToHex( uchar &arr[] , int count=-1 )
{
    string res = "";
    //--- arr配列サイズ確認
    if( count < 0 || count > ArraySize(arr)) {
        count = ArraySize(arr);
    }

    //--- arr配列のデータから文字列(16進数表示)を作成
    for( int i=0; i < count; i++) {
        res += StringFormat("%.2X",arr[i]);
    }

    return( res );
}



サンプルソース:
変換前の元データ    : サイズ=19, 文字列='テストデータ文字列'
エンコード後のデータ: サイズ=24, データ=2803428754BA9A495FF2538F3405302F9C71FA058F531303
デコード後のデータ  : サイズ=24, 文字列='テストデータ文字列'





スポンサーリンク



Copyright ©2015 MT4でEA自作しちゃお〜 All Rights Reserved.


Top

inserted by FC2 system