在 Delphi 中获取 PDF MD5 哈希
Get PDF MD5 Hash in Delphi
我正在使用 Delphi 从 pdf 文件生成散列 MD5。
我想生成与 CouchDB 附件哈希相同的哈希,
但是我得到了不同的结果。
我生成哈希的函数:
function TPliki.generujHashMD5(zawartoscPliku: TMemoryStream): string;
var
tekstPliku: string;
begin
setString(tekstPliku, PAnsiChar(zawartoscPliku.Memory), zawartoscPliku.Size);
result := THashMD5.GetHashString(tekstPliku);
end;
- 在函数之前,我使用 TMemoryStream.LoadFromFile(path)
将文件加载到 TMemoryStream
- 调用此函数 TPliki.GenerujHashMD5(fileContent): string;
- 在这个函数中,我生成哈希和 return 字符串结果。
当我从 Base64 CouchDB 哈希解码时,我的哈希不同。
CouchDB 中的附件设置:
compressible_types: text/*, application/javascript, application/json, application/xml
compression_level: 0
您的代码存在问题,您正在将 PDF 文件的内容 - 二进制数据转换为 Unicode 字符串,并且您正在更改其内容。这会改变你的哈希值。
您应该以不同的方式使用 THashMD5
,直接提供二进制数据而不将其转换为字符串。
function TPliki.generujHashMD5(zawartoscPliku: TMemoryStream): string;
var
hash: THashMD5;
begin
hash := THashMD5.Create;
hash.Update(zawartoscPliku.Memory, zawartoscPliku.Size);
result := hash.HashAsString;
end;
我正在使用 Delphi 从 pdf 文件生成散列 MD5。 我想生成与 CouchDB 附件哈希相同的哈希, 但是我得到了不同的结果。
我生成哈希的函数:
function TPliki.generujHashMD5(zawartoscPliku: TMemoryStream): string;
var
tekstPliku: string;
begin
setString(tekstPliku, PAnsiChar(zawartoscPliku.Memory), zawartoscPliku.Size);
result := THashMD5.GetHashString(tekstPliku);
end;
- 在函数之前,我使用 TMemoryStream.LoadFromFile(path) 将文件加载到 TMemoryStream
- 调用此函数 TPliki.GenerujHashMD5(fileContent): string;
- 在这个函数中,我生成哈希和 return 字符串结果。 当我从 Base64 CouchDB 哈希解码时,我的哈希不同。
CouchDB 中的附件设置:
compressible_types: text/*, application/javascript, application/json, application/xml
compression_level: 0
您的代码存在问题,您正在将 PDF 文件的内容 - 二进制数据转换为 Unicode 字符串,并且您正在更改其内容。这会改变你的哈希值。
您应该以不同的方式使用 THashMD5
,直接提供二进制数据而不将其转换为字符串。
function TPliki.generujHashMD5(zawartoscPliku: TMemoryStream): string;
var
hash: THashMD5;
begin
hash := THashMD5.Create;
hash.Update(zawartoscPliku.Memory, zawartoscPliku.Size);
result := hash.HashAsString;
end;