在Delphi中获取PDF MD5哈希

Inn*_*rld 1 pdf delphi hash md5 couchdb

我正在使用Delphi从pdf文件生成哈希MD5.我想生成与CouchDB附件哈希相同的哈希,但我得到不同的结果.

我生成Hash的功能:

function TPliki.generujHashMD5(zawartoscPliku: TMemoryStream): string;
var
  tekstPliku: string;

begin
  setString(tekstPliku, PAnsiChar(zawartoscPliku.Memory), zawartoscPliku.Size);
  result := THashMD5.GetHashString(tekstPliku);
end;
Run Code Online (Sandbox Code Playgroud)
  1. 在函数之前我使用TMemoryStream.LoadFromFile(path)将文件加载到TMemoryStream
  2. 调用此函数TPliki.GenerujHashMD5(fileContent):string;
  3. 在这个函数中,我生成Hash并返回带有result的字符串.当我从Base64 CouchDB Hash解码时,我的哈希值不同.

附件中CouchDB中的设置:

compressible_types: text/*, application/javascript, application/json, application/xml
compression_level: 0
Run Code Online (Sandbox Code Playgroud)

Dal*_*kar 5

您的代码问题在于您正在将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;
Run Code Online (Sandbox Code Playgroud)