Delphi 2010 DCPCrypt2 Sha256 Hash不等于PHP Hash

时间:2012-01-19 05:04:17

标签: php delphi hash delphi-2010 sha256

我正在编写一个Delphi 2010应用程序,它将连接到PHP Web应用程序以获取特定数据。服务器上的网页接受3个 GET 参数:

  1. cityid // Web应用程序返回特定数据所需的值
  2. 盐//当前时间戳:年月日期小时分钟秒毫秒
  3. 令牌//带有保护安全密钥的SHA-256哈希
  4. 问题在于令牌。它是在Delphi中使用以下函数生成的:

    function DigestToStr(Digest: array of byte): string;
    var
      i: Integer;
    begin
      Result := '';
      for i := 0 to Length(Digest) do
        Result := Result + LowerCase(IntToHex(Digest[i], 2));
    end;
    
    function GetStringHash(Source: string): string;
    var
      Hash: TDCP_sha256;
      Digest: array[0..31] of Byte;
    begin
      Hash := TDCP_sha256.Create(nil);
      Hash.Init;
      Hash.UpdateStr(Source);
      Hash.Final(Digest);
      Hash.Free;
      Result := DigestToStr(Digest);
    end;
    
    procedure TMain.Button3Click(Sendere: TObject);
    var
      TheToken,Sha256:string;
    begin
      salt:=FormatDateTime('yyyymmddhhnnsszzz',Now);
      TheToken:=salt+'THE_SECRET_KEY'+MCity;
      Sha256:=GetStringHash(TheToken);
    end;
    

    Delphi为令牌提供此字符串: ec4338bb3e7819a1148ffc01713f6d164f4f5940c5758d896b0a3d53f30f8c24f0

    PHP的哈希函数提供完全不同的字符串:

    <?php
      hash('sha256','20120119115458592THE_SECRET_KEY1');
    ?>
    

    8b4cff3b937bbcfae8fa7a67ce407b6185451a52e994ea2ef92a760676717490

    我试图在网上寻找类似的问题,但发现只讨论了对称的加密/描述问题,我不需要对令牌进行对称加密


    更新 我已经想通了!问题是错误的变量类型!

    我使用了字符串,当我用 AnsiString 替换它时,它已经解决了!

    function GetStringHash(Source: AnsiString): string;
    var
      ...
    

    除此之外,我更换了

      for i := 0 to Length(Digest) do
    

      for i := 0 to Length(Digest)-1 do
    
    DigestToStr 功能

    中的

    对不起造成干扰,但我希望这会对某人有帮助!

0 个答案:

没有答案