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