|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
arvin (arvin) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2018/5/3 0:57:08 |
标题: |
谢谢大神,第三方支付的数字签名怎么写? |
浏览:1047 |
|
加入我的收藏 |
楼主: |
如题:
接口参数按照字母顺序进行排序后,拼接成字符串并加入key=****后得到数据明文,使用MD5对数据明文进行加密,将加密后的字符串转成大写,得到签名。 例: key=djaUbadladkafhklasdj877qkljhggkh 要传输的数据: { "shopid ":"8000121", "noncestr ":"92206681991447ca90031468d9a21e34", "partnerid ":"200", "outorderid ":"123456", "supplierid ":"1900000109", "orderid ":"", } 数据明文: noncestr=c7ee18d68a6f46a29c9dfcf32714b264&outorderid=123456&partnerid=202&shopid=8000482&supplierid=1900000109&key=djaUbadladkafhklasdj877qkljhggkh 签名:79848EDADBFD13317F4A6C19A52D27C0
发送的数据: { "shopid ":"8000121", "noncestr ":"92206681991447ca90031468d9a21e34", "partnerid ":"202", "outorderid ":"123456", "supplierid ":"1900000109", "orderid ":"", "sign":"79848EDADBFD13317F4A6C19A52D27C0", } 我用的是D7,用INDY10的MD5 从网上摘了两段函数,生成后与例子中的不一样啊。
下面是抄来的函数 function StrToMD5(S: String): String; var Md5Encode: TMD5; begin Md5Encode:= TMD5.Create; try //Result := Md5Encode.AsHex(Md5Encode.HashValue(S)); // Indy9的写法 Result := Md5Encode.HashStringAsHex(S); // Indy10中可以直接HashStringAsHex finally Md5Encode.Free; end; end;
function StrToMD5(S: String; L: integer): String; begin Result := Copy(StrToMD5(S), 5, L); end;
您受累给帮忙看看!
----------------------------------------------
- |
作者: |
arvin (arvin) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2018/5/3 23:24:06 |
1楼: |
今天下午有了一个大概基本的解决,因为只是验证性的开发。在这里感谢网友:汗血宝宝。他给提供了一个方法,就是百度一个MD5的在线加密,把明文复制进去再加密,看跟用DELPHI写的结果是否一致.结果我写的与在线加密的MD5返回值是一样的。而跟接口文档的例子中的签名是不一样的。所以……这事还得找第三方支付的开发问清楚。后续我会把成功的结果放在论坛里以免其他兄弟走弯路。
----------------------------------------------
-
|
作者: |
|
2018/5/4 12:14:45 |
2楼: |
如果你没有中文,那么 不可能不一样。 MD5 算法是定死的。 有中文,才有区别。区别在于编码。 这就是我们喜欢高版本的原因。 高版本 默认 UTF8,不喜欢的话,自己换编码。 高版本 的 MD5 可以抛弃 INDY,当然,不抛弃也是可以的。
D7 的话 string 默认是 Ansistring ,同时你可以强迫他成为 Utf8String。 高版本的 string 是 UnicodeString,为了安全起见,不要去想他是什么编码,你应该当成无编码的。中性的。
需要编码的时候,就该 TBytes 出场了。
用 TEncoding 来完成 String 和 Tbytes 的 转换即可。 MD5 SHA1 BASE64 URL 等 HASH 都支持 TBytes,否则默认都是 UTF8。
关于 MD5 SHA1 BASE64 URL 等 HASH 中编码的问题 http://www.2pascal.com/forum.php?mod=viewthread&tid=3011&fromuid=4 (出处: 2Pascal-新时代的Pascal) 欢迎来讨论。
----------------------------------------------
(C)(P)Flying Wang
|
|