windows - 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 文件。
解决方案
我遇到了同样的问题,但能够通过在每个文件条目前面放置“< 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
希望这可以帮助。
推荐阅读
- node.js - AWS Lambda Node.js - 从异步调用 (ec2.describeImages) 中获取输出
- scala - 为什么在 sbt 发布任务中不排除被驱逐的依赖项
- angular - 具有多种订阅方法的角模态
- c# - Automapper 相同的对象类型映射(将字段从一个对象复制到另一个对象)
- python - 访问 Anaconda3 路径中的自定义模块时出现问题
- r - 如何在 match.call 上编程?
- html - 如何使用 SASS 在各种屏幕宽度上更改 Bootstrap 4 标题字体大小?
- python - Python:对熊猫数据框进行分组和递归计算
- android - Android TV 应用显示在其他应用权限之上
- java - android studio中的媒体播放器问题