假设xml内容为: <order></order>, partnered为123456 那么要签名的内容为<order></order>123456(默认GBK编码),经过md5和base64后的内容就为LghTkEmsD2tbQ3fsIBRcBg== 在Delphi中直接用一次MD5,一次Base64得到的结果姓名不一致,以下为解决办法 uses IdHashMessageDigest, IdGlobal, IdHash, Soap.EncdDecd; function md5b64(s: string): string; var myMd5: TIdHashMessageDigest5; s1: string; idb: TIdBytes; ibyteStream: TBytesStream; OutStr: TBytesStream; begin myMd5:= TIdHashMessageDigest5.Create; try idb:= myMd5.HashString(s,TEncoding.UTF8); ibyteStream:= TBytesStream.Create(idb); OutStr := TBytesStream.Create; try EncodeStream(ibyteStream, OutStr); SetString(Result, PAnsiChar(OutStr.Memory), OutStr.Size); finally OutStr.Free; end; finally myMd5.Free; end; end; 另外,在POST的时候, 如果数据有中文, 需要UTF8Encode处理 Params:= TStringStream.Create(); Params.WriteString(Utf8Encode(Str)); sRst:= idHttp.Post(c_base_url,Params); |
|