zoukankan      html  css  js  c++  java
  • Delphi开发微信公众号SHA1哈希问题

    本文,其他语言的开发者请绕开,用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);
  • 相关阅读:
    idea快速生成javaBean快捷键
    2019.10.22 关于java对象的一些理解
    2019.10.21 解决win10电脑qq通话没有声音
    知乎上看到的好的文章
    2019.10.2怎么查看那些ip访问了你的网站
    2019.10.1怎么在服务器上建一个网站
    2019.9.30第一次把自己写的前端东西放在服务器上哈哈
    新手容易犯的错误
    Python3-列表推导式
    Python3-os模块
  • 原文地址:https://www.cnblogs.com/wuxi15/p/14136607.html
Copyright © 2011-2022 走看看