如何复制 Microsoft .NET 清单哈希,最好是在 Linux 命令行上?

如何复制 Microsoft .NET 清单哈希,最好是在 Linux 命令行上?

我有一个.NETclick-once应用程序,我发现很难(用户无法安装),它会根据.exe.manifest构建时计算的校验和来检查其配置文件的校验和。

我的用户无法安装,错误消息表明哈希值错误。事实上,文件已被修改。

在调试问题时,如果能够复制配置文件各个版本的校验和,通过发布正确的版本来快速解决问题,那就太好了。我主要是 Linux 用户,所以我想在 Bash 提示符下执行此操作。但我无法做到这一点。

在 .exe 清单中,请注意<dsig:DigestValue>标签:

  <file name="config\appsettings\Production.config" size="665">
    <hash>
      <dsig:Transforms>
        <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
      </dsig:Transforms>
      <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
      <dsig:DigestValue>2cwIVAHHyOUgxBtwewfNgPU2YuQ=</dsig:DigestValue>
    </hash>
  </file>

以下是我在 Linux 提示下的思考过程。

#> sha1sum config/appsettings/Development.config.deploy
a2c7bf5b7232c1c1aafbf8203a97c0b791179718

不,我显然需要 base64,呵呵:

#> sha1sum config/appsettings/Development.config.deploy | cut -f1 -d\ | xxd -r -p | base64
ose/W3IywcGq+/ggOpfAt5EXlxg=

这些显然不匹配,所以我遗漏了一些东西。

寻找有关以下内容的信息:

  1. 这些哈希中还使用了什么其他魔法
  2. 与 1 相关,清单中提到了“变换算法”。那是什么?如果那是缺失的部分,那它是如何完成的? - 编辑:哈希的 XML 输入通过该算法进行转换被传递给哈希算法,然而在这种情况下Identity指定了转换,所以我仍然希望文件上的原始 SHA1 足以产生校验和。
  3. .deploy后缀?据我所知,.config构建时的和.config.deploy发布到服务器的文本是相同的。如果我错了,那将是很好的信息。
  4. 如何使用 Linux 工具将所有这些整合在一起?

相关内容