首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么CryptEncode()在mql4中不同于其他语言?

为什么CryptEncode()在mql4中不同于其他语言?
EN

Stack Overflow用户
提问于 2021-07-04 10:14:43
回答 1查看 273关注 0票数 0

我试图理解CryptEncode(),以便在mt4指示器和PHP之间发送和接收字符串。

但是,当字符串在mql4端被加密时,它与在PHP端加密时完全不同。两端使用相同的密钥和相同的加密算法,但双方的加密仍然不同。

当我使用在线工具解密PHP加密字符串时,它成功地解密了刺,而当我使用mql4生成的加密字符串时,它说最后的块没有正确填充。

代码:

代码语言:javascript
复制
   string text="this is the text to be encoded";
   string keystr="d41d8cd98f00b204e9800998ecf8427e";
   uchar src[],dst[],key[];
    
    StringToCharArray(text,src);
    StringToCharArray(keystr,key);
    
       int encd=CryptEncode(CRYPT_AES256,src,key,dst);
       encd=CryptEncode(CRYPT_BASE64,dst,key,src);
       if(encd>0)
        {
          PrintFormat("Encoded data: size=%d, string='%s'",ArraySize(src),CharArrayToString(src));
        }
      else
         Print("Error in CryptEncode. Error code=",GetLastError());

为什么mql4生成的加密字符串不同于任何其他语言生成的字符串?如何避免这个问题?是否有其他加密库可供选择以避免此问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-04 11:12:05

这没有什么不同,只是MQL4只支持非常具体的AES加密实现,除非在其他代码中使用正确的设置,否则将无法实现两个平台之间的兼容性。

具体而言,您需要确保实现以下内容:

  • 填充模式:零
  • 密码模式:欧洲央行(所以没有IV)
  • KeySize: 256个
  • BlockSize: 128个

您可以尝试使用在线AES加密/解密工具来验证您的结果(以下是在线工具箱 )。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68243654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档