在Salesforce中为MT5Meta Trader 5整数生成MD5哈希

问题描述

    ...

字符串srvRand ='d4e005317e38bc0c349a51a0d73a07eb'; 字符串密码='Pass'; 字符串passHash = EncodingUtil.convertToHex(Crypto.generateDigest('MD5',Blob.valueOf(password)));

    Blob webApiBlob = Blob.valueOf('WebAPI');
    String webAPIBlobToHex = EncodingUtil.convertToHex(webApiBlob);
    Blob passAndWebAPIBlob  = EncodingUtil.convertFromHex(passHash + webAPIBlobToHex);

    String passWebAPIHash = EncodingUtil.convertToHex(Crypto.generateDigest('MD5',passAndWebAPIBlob));
    String srvRandAns = EncodingUtil.convertToHex(Crypto.generateDigest('MD5',EncodingUtil.convertFromHex(passWebAPIHash + srvRand)));

    Blob blobKey = crypto.generateAesKey(128);
    String cliRandString = EncodingUtil.convertToHex(blobKey);
    
    HttpRequest requ = new HttpRequest();
    requ.setEndpoint('https://server.address:443/auth_answer?srv_rand_answer=' + srvRandAns + '&cli_rand=' + cliRandString);
    requ.setTimeout(10000);
    requ.setMethod('GET');
    Http h = new Http();
    String resstring = '';
    HTTPResponse rs = h.send(requ);
    resstring = rs.getBody();
    System.debug('resstring authconnection is ' + resstring);...

下面的MT5文档中的步骤

srv_rand_answer的形成方式的分步示例: 让我们分析Web password = Password1和srv_rand =“ 73007dc7184747ce0f7c98516ef1c851”。

  1. 我们以Unicode(在本例中为unicode字符串Password1)计算密码的MD5: MD5('Password1')

结果以字节为单位: [236,46,146,255,112,191,70,145,174,12,104,224,47,220,108,34]

  1. 一个字节的WebAPI字符串作为6个字节添加到字节结果中: MD5('Password1')+'WebAPI'

“ WebAPI”表示为= [87,101,98,65,80,73]。结果以字节为单位: [236,34,87,73]

  1. 获取密码的最终哈希值,作为步骤2中字节结果的MD5: MD5(MD5('Password')+'WebAPI')

结果以字节为单位: [144,75,168,236,177,115,210,240,156,59,138,2,55,82]

结果为十六进制字符串: 904ba8ecb16273d2f0ae9c3b8a023752

  1. 合并来自步骤3和SRV_RAND的密码的字节哈希: MD5(MD5('Password1')+'WebAPI')+ [115,125,199,24,71,206,15,124,152,81,110,241,200,81]

其中[115,81]是转换为字节数组的十六进制字符串73007dc7184747ce0f7c98516ef1c851: srv_rand = 73007dc7184747ce0f7c98516ef1c851 = [115,81]

组合的最终结果(将两个字节数组简单地连接在一起): [144,82,81]

  1. 形成最终的SRV_RAND_ANSWER,作为步骤4字节结果的MD5作为对服务器的响应: MD5(MD5(MD5('Password1')+'WebAPI')+ [115,81]

结果以字节为单位: [119,254,130,127,166,157,216,190,201,170,51,187]

结果转换为十六进制表示形式: 77fe51827f7fa69dd80fbec9aa33f1bb

响应字符串中的最终参数如下: srv_rand_answer = 77fe51827f7fa69dd80fbec9aa33f1bb

身份验证结束 通过交易服务器对客户进行身份验证后,访问服务器将发送响应: {“ retcode”:“ 0完成”,“ answer”:{ “ version_access”:“ 1290”, “ version_Trade”:“ 1290”, “ cli_rand_answer”:“ 8b67609a264764a528ec8c709ab71df2”, } }

LLLLKKKKFAUTH_ANSWER | RETCODE = 0完成| CLI_RAND_ANSWER = 8b67609a264764a528ec8c709ab71df2 | CRYPT_RAND = HEX_256_bytes \ r \ n

但是我收到403响应, 请引导我。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)