gpt4 book ai didi

delphi - Delphi 2009 中的 MD5 哈希

转载 作者:行者123 更新时间:2023-12-03 14:55:02 24 4
gpt4 key购买 nike

在 borland delphi 7 甚至 delphi 2007 中一切正常,但在 delphi 2009 中它只是返回错误的散列!

我使用 wcrypt2 脚本 ( http://pastebin.com/m2f015cfd )

看看:

字符串:“123456”

哈希:

Delphi 7:“e10adc3949ba59abbe56e057f20f883e” - 真正的哈希值。
Delphi 2007:“e10adc3949ba59abbe56e057f20f883e” - 也是真正的哈希值。
和...Delphi 2009:“5fa285e1bebe0a6623e33afc04a1fbd5”-WTF?

我已经尝试了很多 md5 脚本,但 delphi 2009 对所有这些脚本都做了同样的事情。有什么帮助吗?谢谢。

最佳答案

您的库不支持 Unicode。仅向其传递 AnsiString 是不够的,因为它可能在内部使用字符串来存储数据。

您可以尝试更新该库,等待作者更新它,或者仅使用 Delphi 2009 附带的 MessageDigest_5.pas。它位于 source\Win32\soap\wsdlimporter 文件夹,您需要将其添加到您的路径中,或者将其显式包含在您的项目中。

下面是一些在 Delphi 2009 中使用它的示例代码:

uses Types, MessageDigest_5;

procedure TForm16.Edit1Change(Sender: TObject);
var
MD5: IMD5;
begin
MD5 := GetMD5;
MD5.Init;
MD5.Update(TByteDynArray(RawByteString(Edit1.Text)), Length(Edit1.Text));
Edit2.Text := LowerCase(MD5.AsString);
end;

你正在做生意:

MD5(123456) = e10adc3949ba59abbe56e057f20f883e

如果您愿意,您可以将其包装在一个简单的函数调用中。在转换为 TByteDynArray 之前转换为 RawByteString 非常重要,因为 RawByteString 转换会删除所有额外的 Unicode 字符。当然,如果编辑包含 Unicode 字符,那么您最终可能会得到错误的数据。

请记住,GetMD5 返回一个接口(interface),因此它是引用计数的,等等。

圣诞快乐!

关于delphi - Delphi 2009 中的 MD5 哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/392657/

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