什么是publickeytoken及publickeytoken的作用

阿里云服务器

**Public Key Token(公钥标记)**是.NET框架中一个重要的概念,它用于唯一标识程序集(Assembly)并确保程序集的完整性和来源可信。Public Key Token是一个16进制的字符串,它是通过程序集的公钥(PublicKey)生成的哈希值。下面将从多个方面详细阐述Public Key Token及其作用。

一、Public Key Token的定义

Public Key Token是一个用于唯一标识.NET程序集的值,它基于程序集的公钥生成。在.NET中,每个程序集都可以选择是否使用强名称(Strong Name)签名。如果程序集使用了强名称签名,那么它就会被赋予一个唯一的公钥标记(Public Key Token)。这个公钥标记是通过程序集的公钥的一部分(通常是公钥的SHA-1哈希值的前8个字节,转换为16进制格式)计算得到的。

二、Public Key Token的作用

1. 唯一标识

Public Key Token能够唯一标识一个程序集,确保不同的程序集具有不同的公钥标记。这种唯一性对于程序集之间的引用和版本控制非常重要。在.NET中,当一个程序集引用了另一个程序集时,它会通过程序集的名称、版本号、文化信息(如果有的话)以及公钥标记来定位被引用的程序集。这样,即使在不同的目录或不同的应用程序中,只要这些值相同,就能正确地找到并加载被引用的程序集。

2. 完整性验证

Public Key Token还可以用于验证程序集的完整性和真实性。由于Public Key Token是基于程序集的公钥生成的,因此它可以与程序集的数字签名一起使用来验证程序集是否被篡改或替换。当程序集被加载到.NET运行时中时,.NET运行时会验证程序集的数字签名是否与公钥标记相匹配。如果不匹配,那么说明程序集已被更改,.NET运行时将拒绝加载该程序集。

3. 安全性控制

Public Key Token在.NET中还用于实现安全性控制。在.NET中,程序集可以被授予不同的权限级别,这些权限级别决定了程序集可以执行哪些操作。公钥标记是用于确定程序集的信任级别的一种方式。当.NET运行时加载程序集时,它会根据程序集的公钥标记来查找与该公钥标记相关联的代码访问安全(CAS)策略。然后,.NET运行时会根据这些策略来授予程序集相应的权限。

4. 跨应用程序和跨机器的共享

由于Public Key Token提供了程序集的唯一标识,因此它还有助于跨应用程序和跨机器的共享。在全局程序集缓存(GAC, Global Assembly Cache)中部署的程序集必须具有强名称,包括一个有效的公钥标记。这样,当多个应用程序需要引用同一个程序集时,它们就可以通过程序集的名称、版本号和公钥标记来找到并共享该程序集,而无需在每个应用程序的目录中复制该程序集的副本。

三、总结

Public Key Token是.NET框架中用于唯一标识程序集并确保程序集完整性和来源可信的一种机制。它通过程序集的公钥生成,具有唯一性、完整性验证和安全性控制等多种作用。在.NET开发中,了解和掌握Public Key Token的概念和作用对于确保应用程序的稳定性和安全性至关重要。同时,随着.NET框架的不断发展和完善,Public Key Token的作用也可能会得到进一步的扩展和增强。