【问题标题】:Why is CryptEncode() in mql4 different from other languages?为什么 mql4 中的 CryptEncode() 与其他语言不同?
【发布时间】:2021-09-15 11:57:23
【问题描述】:

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

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

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

代码:

   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 生成的加密字符串与任何其他语言生成的字符串不同?如何避免这个问题?是否有任何替代加密库可用于避免此问题?

【问题讨论】:

    标签: mql4 metatrader4


    【解决方案1】:

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

    具体而言,您需要确保实现以下各项:

    • 填充模式:零
    • 密码模式:ECB(所以没有 IV)
    • 密钥大小:256
    • 块大小:128

    您可以在此处尝试在线 AES 加密/解密工具来验证您的结果:The online toolbox

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-12
      • 2020-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多