使用公钥令牌对DLL程序集进行签名

本文关键字:程序集 DLL 公钥 令牌 | 更新日期: 2023-09-27 17:50:52

我继承了一个c# . net应用程序,需要对其中一个DLL程序集中的一些路径名字符串进行轻微修改。很遗憾,我没有源代码。

我使用ILSpy和Reflexil插件进行了必要的修改。当我保存DLL时,我被告知原始文件已签名,新文件不签名将无法工作。新文件现在被"延迟签名"。

我可以看到公钥、公钥令牌和Reflexil的哈希算法。

我是一个全新的。net IL.我如何使用公钥信息,我有签名补丁的DLL?

我有Visual Studio 2013,所以可以访问sn.exe,如果有帮助的话。

使用公钥令牌对DLL程序集进行签名

正如Luaan上面所说的,我想做的是不可能的。私钥就是——私钥。公钥设计用于验证目的,以确保程序集未被修改。

删除强名称是一种选择,正如Luaan在他的一条评论中所说。然而,这对我不起作用,因为有许多依赖项,使得该方法不切实际。

作为临时解决方案,我已将程序集文件延迟签名,并在有关DLL的注册表中禁用强名称验证。

要禁用强名称验证,请将此键添加到注册表:

HKEY_LOCAL_MACHINE'SOFTWARE'Microsoft'StrongName'Verification'<filename without extension>,<public key token>

对于64位系统,您还需要添加此密钥:

HKEY_LOCAL_MACHINE'SOFTWARE'Wow6432Node'Microsoft'StrongName'Verification'<filename without extension>,<public key token>

请注意,建议禁用强名称验证仅用于测试目的,因为这可能代表安全问题。