CryptDecode
CryptDecode
执行数组数据逆转换,通过CryptEncode()转换。
int CryptEncode(
ENUM_CRYPT_METHOD method, // 方法
const uchar& data[], // 源数组
const uchar& key[], // 密钥
uchar& result[] // 目标数组
);参数
- method
[in] 数组转换方法。可以是ENUM_CRYPT_METHOD 枚举的一个值。
- data[]
[in] 源数组。
- key[]
[in] 密钥数组。
- result[]
[out] 目标数组。
返回值
错误情况下返回目标数组的字节数或0。若要获得有关错误 信息,调用 GetLastError() 函数。
示例:
input string InpKey = "ABCDEFG"; // 加密密钥
//+------------------------------------------------------------------+
//| 脚本程序起始函数 |
//+------------------------------------------------------------------+
void OnStart()
{
string text="The quick brown fox jumps over the lazy dog";
uchar src[],dst[],key[];
//--- 准备加密密钥
StringToCharArray(InpKey,key);
//--- 准备src[]源数组
StringToCharArray(text,src);
//--- 显示源数据
PrintFormat("Initial data: size=%d, string='%s'",ArraySize(src),CharArrayToString(src));
//--- 使用DES方法加密src[]数组,key[]为56位密钥
int res=CryptEncode(CRYPT_DES,src,key,dst);
//--- 检查加密结果
if(res>0)
{
//--- 显示加密数据
PrintFormat("Encoded data: size=%d %s",res,ArrayToHex(dst));
//--- 使用DES方法解密dst[]数组数据,key[]为56位密钥
res=CryptDecode(CRYPT_DES,dst,key,src);
//--- 检查结果
if(res>0)
{
//--- 显示解密数据
PrintFormat("Decoded data: size=%d, string='%s'",ArraySize(src),CharArrayToString(src));
}
else
Print("CryptDecode failed. Error: ",GetLastError());
}
else
Print("CryptEncode failed. Error: ",GetLastError());
}
//+------------------------------------------------------------------+
//| ArrayToHex |
//+------------------------------------------------------------------+
string ArrayToHex(uchar &arr[],int count=-1)
{
string res="";
//--- 检查大小
if(count<0 || count>ArraySize(arr))
count=ArraySize(arr);
//--- 转到hexadecimal字符串
for(int i=0; i<count; i++)
res+=StringFormat("%.2X",arr[i]);
return(res);
}