首页 > 解决方案 > Makecat 失败:未找到成员

问题描述

我正在尝试通过在 [CatalogHeader] 部分下添加以下两行来修改现有的输入 cdf 文件以使用 SHA256 而不是 SHA1:

CatalogVersion=2
HashAlgorithms=SHA256

即使 [CatalogFiles] 下没有任何更改,现在执行 makecat.exe 也会给我以下失败消息:

Failed: CryptCATCDFEnumMembersByCDFTagEx. Last Error: 0x00000057
Failed: No members found. Last Error: 0x00000057

Failed 0x00000057 (87)

如果我取出我添加的两行,Makecat 确实会找到并散列所有文件。

谁能告诉我这里可能出了什么问题?

这是 MCVE 的示例 cdf 文件:

[CatalogHeader]
Name=MCVE.cat
CatalogVersion=2
HashAlgorithms=SHA256

[CatalogFiles]
MCVE.xml=MCVE.xml

MCVE.xml 是您可以找到的任何旧 xml 文件。

标签: windowssha256

解决方案


我遇到了同样的问题,但能够通过在每个文件条目前面放置“< HASH >”(不带空格)来使其工作。例子:

[CatalogFiles]
<HASH>manifest.json=.\manifest.json
<HASH>bsi.json=.\bsi.json

但是,当在 Windows 资源管理器中查看 .cat 文件时,这会导致目录文件的条目由它们的哈希而不是它们的文件名来标记。您可以通过添加自定义属性以在目录条目的详细信息中显示文件名来解决此问题,如下所示:

[CatalogFiles]
<HASH>manifest.json=.\manifest.json
<HASH>manifest.jsonATTR1=0x11010001:File:manifest.json
<HASH>bsi.json=.\bsi.json
<HASH>bsi.jsonATTR1=0x11010001:File:bsi.json

属性类型由 ( https://docs.microsoft.com/en-us/windows/desktop/seccrypto/makecat ) 组成:

  • 0x10000000:属性包含在目录的哈希中
  • 0x01000000:不要使用 SHA1 哈希创建重复的属性(使用 SHA256 和目录版本 2 时)
  • 0x00010000:属性是明文,不是base64
  • 0x00000001:属性是键值对(例如 File=bsi.json)

当我在此处找到此示例时遇到与您相同的问题后,我发现了此解决方法:https ://www-user.tu-chemnitz.de/~heha/viewzip.cgi/basteln/PC/USB2LPT/usb2lpt.zip/ src/Makefile?auto=MAK

希望这可以帮助。


推荐阅读