我正在使用FireMonkey的Delphi XE2。
我已经阅读了许多关于MD5的问题,但没有找到解决我的问题的答案......我还尝试了不同的脚本来从Delphi生成MD5:
function MD5(const text: string) : string;
var
md5 : TIdHashMessageDigest5;
begin
md5 := TIdHashMessageDigest5.Create;
Result := LowerCase(md5.HashStringAsHex(text, TEncoding.ANSI));
md5.Free;
end;
或者
function MD5(const text: String) : string;
var
md5: IMD5;
begin
md5:= GetMD5;
md5.Init;
md5.Update(TByteDynArray(RawByteString(AnsiString(text))), Length(AnsiString(text)));
Result := LowerCase(md5.AsString);
end;
两者都给我相同的结果...通常与我在PHP中得到的结果相同:
$md5 = md5($toencode);
$md5 = hash("md5", $toencode);
但是,如果我使用Delphi或PHP请求这些字符之一的MD5时,结果会有所不同:
"
或 '
。也许还有其他生成不同结果的字符,但在我的测试中,我只发现了这些...
我已经尝试了许多扩展ASCII字符,并且得到了相同的MD5值...
所以,我不明白为什么其中一些字符("
或 '
)会有差异,我想知道是否有一种方法可以从Delphi始终生成与PHP MD5结果相同的结果,无论字符是什么。
有什么想法吗?
例如:
使用Delphi:
": b15835f133ff2e27c7cb28117bfae8f4
': 3590cb8af0bbb9e78c343b52b93773c9
使用PHP:
": 3bd864034f446da13581129bb17f9191
': 024c94d6e03b6f67a86b952b914816c7
总结这个问题... 我已经找到了答案... 顺便说一下,我将其发布出来,因为其他人可能也有同样的问题...
"
和 '
在PHP中是转义的... 因此,在Delphi中,我必须编码 \"
和 \'
... 如果您认为我已经忘记了某些字符或者想要添加一些细节,请不要犹豫...
#0
),请参见http://www.php.net/manual/en/security.magicquotes.what.php。 - Stijn Sanders