ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Delphi开发微信公众号SHA1哈希问题

2020-12-15 03:32:26  阅读:224  来源: 互联网

标签:Sort Compare SHA1 TStringList 微信 Delphi msg Integer


本文,其他语言的开发者请绕开,用SDK直接解决!!

 

 这里先说一下,加密时要用的不是AESKey,而是AppID。

然后,我们在做消息回复加密时,要用到一个签名,

验证方式:

1. 开发者计算签名,dev_msg_signature=sha1(sort(Token、timestamp、nonce, msg_encrypt))

2. 比较dev_msg_signature和URL上带的msg_signature是否相等,相等则表示验证通过。

解密方式如下:

原文这样写的。正常的做法我们都是用TStringList进行排序,先 Add,然后 sort  最后再进行SHA。OK,这是正确的做法。

但是,在某些情况下,Delphi Sort之后的结果会和微信公众号的Sort结果不同(准确的来说应该是其他语言)。

所以我有时加密,签名后回复消息,有时回复得了,有时回复不了。用开发者开具调试后发现,提示这个,原来是签名错了,再之后才发现是Delphi Sort的问题!

 

解决方法是用TStringList的自定义排序,

Delphi里自义定排序的定义
procedure TStringList.CustomSort(Compare: TStringListSortCompare);
begin
  if not Sorted and (FCount > 1) then
  begin
    Changing;
    QuickSort(0, FCount - 1, Compare);
    Changed;
  end;
end;
  TStringListSortCompare = function(List: TStringList; Index1, Index2: Integer): Integer;
我这样定义
function Compare(List: TStringList; Index1, Index2: Integer): Integer;
var
  S1, S2: string;
begin
  S1 := List[Index1];
  S2 := List[Index2];
  Result := CompareStr(S1, S2)  //注意不是CompareText, CompareStr 区分大小写; CompareText 不区分大小写. 
end;
然后不调用 Sort,调用的是
 Strlist.CustomSort(Compare);

 

标签:Sort,Compare,SHA1,TStringList,微信,Delphi,msg,Integer
来源: https://www.cnblogs.com/wuxi15/p/14136607.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有