繁体   English   中英

强名称签名验证程序集的哪些部分

[英]What parts of an assembly does the strong name signing verify

据我了解,对程序集进行强名称签名会使用程序集内容的某种哈希值,并对其进行签名,因此,如果在签名后更改了程序集,则该程序集将不再起作用。 但是,我只是创建了一个小实用程序,以便在构建应用程序后向其添加额外的win32资源,据我所知,它不会导致强名称签名程序集完全停止运行。

我创建了一个小测试应用程序,它只输出其程序集名称,强名称签名,然后添加额外的图标。 以下是该计划:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("My name is " + Assembly.GetExecutingAssembly().GetName());
    }
}

修改程序集后,我仍然可以运行它,并使用我的公钥令牌打印出它的程序集名称,没有任何问题:

My name is TestApp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cd4a03be895200fa

现在,我的问题是,强名称签名是否仅检查程序集的某些部分,即不哈希Win32资源,还是我完全误解了强名称签名的工作原理? 如果我的装配在签字后被更换了,它不应该停止工作吗?

强名称包括程序集的标识 - 简单文本名称,版本号和文化信息(如果提供)-plus公钥和数字签名。 它是使用相应的私钥从程序集文件(包含程序集清单的文件,而程序集清单又包含组成程序集的所有文件的名称和哈希)生成的。

强名称程序集文档

因此,如果您使用相同的密钥对程序集进行签名,并且如果您不更改其名称,版本号和文化,则它将被加载而没有任何问题。

散列用于防止修改程序集文件,因此如果您修改已编译的dll(使用,比方说,HEX编辑器),它将不会被加载(因为散列将不匹配)。 但是,只要哈希匹配,并且程序集具有正确的签名-它就会亮绿灯。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM