![CryptDecode](https://celebpanda.com/wp/wp-content/uploads/2021/08/CryptDecode-1.jpg)
CryptEncode()関数によってエンコードされたデータ配列をデコードします。
CryptDecode
関数書式
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 );
}