讷河做网站公司,wordpress新站5天收录,重庆网站seo技术,有哪些做问卷调查的网站好生成、部署和管理1 如何生成强签名的程序集2 如何把程序集放入GAC中3 延迟签名及其作用4 程序集的版本分哪几部分 1 如何生成强签名的程序集在生成程序集时#xff0c;CLR提供了两种可选类型#xff1a;强签名程序集。弱签名程序集。 强签名程序集是一个带有公钥和数字签名的…生成、部署和管理1 如何生成强签名的程序集2 如何把程序集放入GAC中3 延迟签名及其作用4 程序集的版本分哪几部分 1 如何生成强签名的程序集在生成程序集时CLR提供了两种可选类型强签名程序集。弱签名程序集。 强签名程序集是一个带有公钥和数字签名的程序集每个强签名都可以由四个元素来唯一标识它们分别是文件名、版本号、语言文化和公钥。这些信息都被包含在程序集的清单之中。相对于强签名程序集弱签名程序集拥有完全一样的元数据、CLR文件头和程序集清单唯一不同的是弱签名程序集没有公钥也不进行数字签名。弱签名程序集不能被放入全局程序集缓存GAC中只能进行私有部署。这里简单介绍一下加密的基本概念。当我们在处理私密信息的时候就需要用到加密技术。常用的加密技术有对称加密技术、非对称加密技术和不可逆加密技术。.NET的公钥私钥机制属于非对称加密技术。非对称加密的基本概念是加密方用公钥对信息加密而解密方需要使用公钥和与其配对的私钥对已加密信息进行解密。非对称加密的特点在于公钥可以公开加密算法公开而唯一控制解密的关键就在于私钥所以在非对称加密中公钥往往随加密信息一起发送到接收方而接收方通过公钥来寻找与其配对的私钥并且进行解密。现在常用的非对称算法有RSA算法和DSA算法。回到.NET的加密机制中当生成一个强签名程序时其公钥将被添加到程序清单之中。同时在程序集被发布Publish时也会生成一个数字签名数字签名包含了程序集清单的散列值而程序集清单又包含了该程序集中所有模块的散列值在这种情况下除非拥有程序集的公钥和私钥否则将无法对程序集做任何改动。可见在强签名程序集中公钥和数字签名一起实现了对程序集的保护。下图展示了一个强签名程序集的内部结构以及引用这个程序集的其他程序集的结构。程序集2引用了程序集1中的引用所以在程序集2的CLR头中保留了程序集1的公钥标记。 注意:由于公钥过长程序集引用可以使用公钥标记来代替公钥。公钥标记是指公钥的一个散列值长为8个字节。了解了公钥的基本原理之后现在笔者以C#的编译器CSC.exe为例来说明如何生成一个强命名的程序集。首先需要为新的强命名程序集准备一对唯一的公钥/私钥。.NET Framework提供了一个很实用的工具sn.exe。打开一个Visual Studio 2010的命令台输入下面这条命令sn –k C:/MyPublicPrivateKey.snksn.exe就会为我们在C盘根目录下生成一个MuPublicPrivateKey.snk文件。这个文件把公钥和私钥拼接在了一起大小为596字节其中前160字节属于公钥而后436字节属于私钥。用户可以控制sn.exe的输入参数来仅仅得到公钥或者实现其他功能。准备好了公钥/私钥对就可以生成一个强命名程序集了。打开一个Visual Studio 2010自带的命令台并且进入xxx.cs所在的目录输入以下命令csc.exe /t:library xxx.cs /keyfile:C:\MyPublicPrivateKey.snk一个名为xxx的强命名程序集就被生成了读者可以尝试自己编写一个引用该强命名程序集的程序集并且尝试用一个弱命名程序集来代替它。当然这是没办法实现的公钥标记和数字签名将很好地保证程序集不能被随意篡改。生成强签名的程序集需要有公钥/私钥对。在得到了公钥/私钥对后就可以控制编译器的输入参数来得到一个强签名的程序集。对于C#的编译器CSC.exe来说可以用/keyfile参数来制定使用那个公钥/私钥文件。 2 如何把程序集放入GAC中 所谓的GAC就是全局程序集缓存Global Assembly Cache。被放入GAC的程序集无论在何处被其他程序集引用都可以保证自己能够被CLR找到并且加载。简单来说GAC是一个有规范的目录结构。如果主机使用的是Windows操作系统并且操作系统被安装在c:\windows下那么GAC会被安装在c:\windows\assembly\下。这种显示方式和一般的文件夹显示方式有很大区别。实际上.NET Framework附带了一个全局程序集缓存的查看器assembly viewer上图就是这个查看器的显示功能它很清楚地列出了唯一标识一个程序集的4个元素名称、版本、文化和公钥标记同时它也列出了另外一个影响程序集在GAC中目录结构的元素处理器体系结构。读者可以通过关闭查看器功能来亲眼看一看GAC目录的真正面目。具体做法是在注册表HKEY_LOCAL_ MACHINE\Software\Microsoft\Fusion下建立一个名为DisableCacheViewer的DWORD值并且将该值设为0。读者将会发现GAC是一个多层的目录结构其结构符合一定的规范。注意 除非需要学习GAC目录结构否则在任何时候都不应该手动地去修改GAC目录任何对GAC目录的操作都应该通过工具实现。 在一般情况下GAC具有如下优点 程序集被多处引用时可有效减少内存成本。通过发布者策略可以有效地发布程序集的最新版本。同一程序集的多个版本可以共存并且可以通过配置进行切换。是否所有的程序集都可以被放入GAC中呢答案是否定的。只有带有公钥的强签名程序集才能被部署到GAC中去在程序集被放入GAC时.NET将检查程序集的CLR头和加密值保证程序集未被篡改。把程序集放入GAC中可以手动地部署也可以通过工具进行部署。最简单的方法就是通过前面介绍的assembly viewer直接把程序集拖入到assembly viewer显示的GAC目录下。 注意:这里提到的拖放实际上还是使用了assembly viewer的功能而不同于直接把程序集复制到GAC文件夹下。再次强调读者不应该手动地去修改破坏GAC目录结构。.NET Framework还提供了一个工具来有效地管理GACGACUTIL.exe。笔者生成了一个强签名的程序集Compile.dll。现在尝试将其放入GAC中Gacutil –i Compile.dll进入assembly viewer读者将会发现刚刚加入的这个新程序集Compile.dll0.0.0.0。 GAC是一个具有特定目录结构的文件夹所有强签名的程序集都可以被放入GAC中。可以通过.NET Framework自带的assembly viewer来简单地拖动添加一个程序集到GAC中也可以利用诸如gacutil.exe等工具使用命令行来添加。总之任何方法归根结底都是根据GAC的规范和程序集本身的特性在GAC目录下建立相应的子目录结构。 3 延迟签名及其作用 当生成一个强签名程序集时在CLR头部中会加入公钥和数字签名公钥和数字签名能够保护程序集不被随意篡改。但是有经验的.NET程序员或者项目经理会有这样的切身经历带有防篡改功能的程序集在开发和测试阶段会变得极其不方便。为了使用和修改该程序集项目组不得不把非常重要的私钥分发出去而这将会给项目的保密性带来极大的威胁。所以在项目的开发和测试阶段延迟签名技术会被经常使用。顾名思义延迟签名的基本概念就是把私钥加密延迟到项目真正发布时再进行。而在开发和测试阶段程序员将只用一个公钥来生成强签名程序集。这样程序集的CLR头中只有公钥而没有数字签名数字签名的空间将会被保留而且所有的文件也不经过加密处理。在CLR头中数字签名的空间被保留了下来并且没有对文件进行HASH处理。而在其他方面延迟签名不会产生任何影响。说到这里读者可能会有这样的疑问延迟签名的程序集能否被放入到GAC中呢回顾一下在上一节中介绍的GAC对程序集的要求为该程序集是带有公钥的强签名程序集。延迟签名的程序集带有一个公钥所以原则上是可以被放入GAC的但由于GAC会对程序集进行加密验证延迟签名的程序集缺乏私钥而没有经历任何HASH处理所以延迟签名的程序集在被放入GAC之前需要通知.NET不要对该程序集进行加密验证。延迟签名就是指把对强签名程序集的私钥加密和数字签名延迟到实际发布时进行。延迟签名提高了开发测试阶段的效率也方便了机构和项目组管理自己的私钥。 4 程序集的版本分哪几部分 有四个元素可以唯一标识一个强签名程序集分别是名字、版本号、文化和公钥。程序集的版本号通常由四个部分组成它们是 主版本号Major Version次版本号Minor Version内部版本号Build Version修订号Revision Version默认地版本号越大代表系统越新。一般主版本号和次版本号的定义比较明确当系统经历一个比较大的升级主版本号会有改动而在一个主版本中小功能的发布则会通过次版本号进行发布。关于内部版本号和修订号理解的分歧会更大一点。在一般情况下一个内部版本号代表系统内部的一次集成周期而一个修订号则代表集成周期中的一次编译。 例如某个目前版本号为12.2的系统组织内部决定在新版本12.3发布前进行6个集成周期每个集成周期历时一周而编译系统则被设置成每天午夜编译一次。这样在通常情况下这个系统将针对6个集成周期形成6个内部版本号从12.3.1到12.3.6。而对于每个内部版本将会经历7次编译则系统会拥有7个修订号。例如第二版本将会拥有这样7个版本号12.3.2.1到12.3.2.7。 注意:版本号的划分并没有明确的规范。但组件发布者应该按照常用定义来确定产品的版本号怪异的版本号划分将会误导组件使用者。 转载请注明出处 作者JesseLZJ出处http://jesselzj.cnblogs.com转载于:https://www.cnblogs.com/jesselzj/p/4782493.html