gpt4 book ai didi

Delphi XE5 SHA1 Base64 结果不符合预期

转载 作者:行者123 更新时间:2023-12-03 18:35:48 25 4
gpt4 key购买 nike

我正在开发一个需要密码摘要的系统接口(interface)。我有一个 Python 脚本,它可以生成正确的密码摘要,但是当我在 Delphi 中尝试同样的事情时,它会得到完全不同的结果。

我正在测试的值是:

随机数 = 299770410

创建 = 2015-09-07T11:34:50Z

密码 = Stentrd94*

密码摘要 = Base64(SHA-1(Nonce + Created + SHA-1(Password)))

Python 结果 = azFZeikCSbUvpiUx1tJI0foac24=

德尔福代码

TIdEncoderMIME.EncodeString(EncryptSHA1(NONCE+CREATED+EncryptSHA1(PASSWORD)));

德尔福的结果 = VTNoN08xOVdFcGM2S1RGb3B6SlBHV0FMN3BvPQ==

我知道 TIdEncoderMIME.EncodeString 部分正在工作,因为请求的第二部分是 Base64(NONCE)
python = Mjk5NzcwNDEw 
Delphi = Mjk5NzcwNDEw

所以这似乎与导致问题的 EncryptSHA1 有关。这是 EncryptSHA1 函数
function EncryptSHA1(const aPassword : string) : string;
begin
Result := '';
if aPassword <> '' then // make sure we have a file to hash
begin with TIdHashSHA1.Create do
try
Result := TIdEncoderMIME.EncodeBytes(HashString(aPassword));
// Result := HashStringAsHex(aPassword);
finally
Free;
end;
end;
end;

如果有帮助,我尝试与之通信的系统是 Royal Mail DMO。任何帮助将不胜感激。

我刚刚分解了 Python 代码和
sha.new(PASSWORD).Digest() gives the following :  ■§Û→∟ÙM,┌åÓcÿ♥☻├.D¡d 

并且密码摘要的 SHA 给出:k1Yz)☻IÁ/ª%1ÍÊHз→sn。

然后是 Base64.b64Encode,它给出了正确的结果。但是我看不到如何使用 Delphi Indy 来实现这一点。

最佳答案

问题出在您的 EncryptSHA1 过程中。您返回错误的编码字符串 (TIdEncoderMIME.EncodeBytes)。

这是一个给出正确输出的过程

var
bPassword, bStr: TIdBytes;
shaHash: TIdHashSHA1;
begin
shaHash:=TIdHashSHA1.Create;
try
bPassword:=shaHash.HashBytes(ToBytes('Stentrd94*'));
bStr:=ToBytes('299770410'+'2015-09-07T11:34:50Z');
AppendBytes(bStr, bPassword);

ShowMessage(TIdEncoderMIME.EncodeBytes(shaHash.HashBytes(bStr)));
finally
shaHash.Free
end;
end;

您可以使用附加参数来指定编码
ToBytes('Stentrd94*', IndyTextEncoding_UTF8)

关于Delphi XE5 SHA1 Base64 结果不符合预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32454979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com