//+------------------------------------------------------------------+
//| ArrayToHex |
//+------------------------------------------------------------------+
string ArrayToHex(uchar &arr[],int count=-1)
{
string res="";
//--- チェック
if(count<0 || count>ArraySize(arr))
count=ArraySize(arr);
//--- 16 進文字列に変換する
for(int i=0; i<count; i++)
res+=StringFormat("%.2X",arr[i]);
//---
return(res);
}
//+------------------------------------------------------------------+
//| スクリプトプログラムを開始する関数 |
//+------------------------------------------------------------------+
void OnStart()
{
string text="The quick brown fox jumps over the lazy dog";
string keystr="ABCDEFG";
uchar src[],dst[],key[];
//--- キーを準備する
StringToCharArray(keystr,key);
//--- テキストを元の配列 src[] に複製する
StringToCharArray(text,src);
//--- 初期データをプリントする
PrintFormat("Initial data: size=%d, string='%s'",ArraySize(src),CharArrayToString(src));
//--- src[] を key[] のDES 56-ビットキーを使用して暗号化する
int res=CryptEncode(CRYPT_DES,src,key,dst);
//--- エラーをチェックする
if(res>0)
{
//--- 暗号化されたデータをプリントする
PrintFormat("Encoded data: size=%d %s",res,ArrayToHex(dst));
//--- dst[] を src[] にデコードする
res=CryptDecode(CRYPT_DES,dst,key,src);
//--- エラーをチェックする
if(res>0)
{
//--- デコードされたデータをプリントする
PrintFormat("Decoded data: size=%d, string='%s'",ArraySize(src),CharArrayToString(src));
}
else
Print("Error in CryptDecode. Error code=",GetLastError());
}
else
Print("Error in CryptEncode. Error code=",GetLastError());
}
|