delphi - 在 Delphi 中获取 PDF MD5 哈希值

标签 delphi pdf hash couchdb md5

我正在使用 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;
  1. 在函数之前,我使用 TMemoryStream.LoadFromFile(path) 将文件加载到 TMemoryStream
  2. 调用此函数TPliki.GenerujHashMD5(fileContent): string;
  3. 在此函数中,我生成哈希并返回带有结果的字符串。 当我从 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 - 在 Delphi 中获取 PDF MD5 哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33936909/

相关文章:

performance - TDictionary<TObject, TObject> 的默认 IEqualityComparer?

javascript - Telerik kendo ui 绘图 exportPDF 发送到服务器

java - 如何使用 Apache PDFBox 从按钮中提取标签文本?

c# - iTextSharp - 添加垂直文本框

c++ - Dan Bernstein 为 C++ 编写的 djb2

java - 在不覆盖哈希方法的情况下删除重复项

Delphi SelectClipRGN 隐藏绘制位图

delphi - tcxDateEdit 编辑消息错误

listview - 从内存中清除动态 FMX ListView 位图

hash - 将哈希与二叉搜索树进行比较