[ZZ]强签名的由来和作用
在網(wǎng)上,看到很多初學(xué).NET的網(wǎng)友經(jīng)常問(wèn),強(qiáng)簽名是什么,它的作用是什么?一句話,強(qiáng)簽名就是唯一標(biāo)識(shí)一個(gè)Assembly文件的名稱(chēng)。它由Assembly的文件名、版本號(hào)、區(qū)域信息、公鑰信息和處理器架構(gòu)信息組成,這樣做是為了避免以前Windows里面的DLL HELL問(wèn)題。
在強(qiáng)名以前,如果一個(gè)DLL升級(jí)覆蓋了老版本的DLL,有可能會(huì)導(dǎo)致系統(tǒng)里面一些依賴(lài)?yán)习姹镜腄LL程序出現(xiàn)兼容型的問(wèn)題。這是因?yàn)樾掳姹纠锩婵赡軐⒗习姹綝LL的一些函數(shù)的實(shí)現(xiàn)方法改變—為了修復(fù)一些Bug,因此強(qiáng)簽名就將程序的版本信息作為唯一標(biāo)識(shí)Assembly的一部分。
而.NET又因?yàn)闅v史原因,在開(kāi)發(fā)的時(shí)候由于PC還沒(méi)有64位的處理器可以使用,因此雖然.NET程序編譯成MSIL中間代碼以后,CLR可以根據(jù)所運(yùn)行的機(jī)器的處理器架構(gòu)生成對(duì)應(yīng)的代碼。但是還是有一些Assembly模塊是依賴(lài)于指定平臺(tái)的,例如CustomMarshalers.dll,這個(gè)DLL調(diào)用了一些unsafe代碼,里面有一些指針操作,因此這個(gè)dll是依賴(lài)于指定平臺(tái)的。因此在2.0的.NET以后,強(qiáng)簽名就將程序所依賴(lài)的處理器信息也作為其一部分。
另外由于很多公司都需要開(kāi)發(fā)國(guó)際化軟件產(chǎn)品,一般希望只保留一份代碼,然后將代碼里面用到的字符串放到其他Assembly里面?—?這個(gè)Assembly叫做資源Assembly。在代碼Assembly使用字符串的時(shí)候,只要指定字符串在資源Assembly對(duì)應(yīng)的標(biāo)識(shí)符,在做本地化的時(shí)候,軟件發(fā)布廠商只需要為需要支持的語(yǔ)言添加對(duì)應(yīng)的資源Assembly就可以了。比如mscorlib.dll里面會(huì)扔出很多的異常,為了能為不同國(guó)家的.NET用戶(hù)顯示本地化的異常消息,mscorlib.dll將所有異常消息都提取到資源Assembly里面,因此你會(huì)看到系統(tǒng)里面安裝了mscorlib.en-us.dll,mscorlib.zh-cn.dll等等。使用.NET的ResourceManager類(lèi)可以根據(jù)字符串標(biāo)識(shí)符將資源Assembly里面對(duì)應(yīng)的字符串和其他資源(有些圖片也需要本地化,例如改變圖片上的文字)提取出來(lái),因此強(qiáng)簽名就將程序支持的區(qū)域信息作為它的一部分。
組件發(fā)布了以后,如何想其他人證明組件就是你發(fā)布的?例如在下圖的例子中,張三和黑客的程序都發(fā)布給王二,兩個(gè)程序都聲稱(chēng)自己是張三提供的,王二如何區(qū)別哪個(gè)才是真的張三呢?
?
?
因此我們有了數(shù)字簽名這個(gè)解決方案,在下圖的例子中:
?
?
因此公鑰作為強(qiáng)簽名的一部分就不是很奇怪了。
轉(zhuǎn)自:http://blog.csdn.net/Donjuan/archive/2009/02/02/3859136.aspx
轉(zhuǎn)載于:https://www.cnblogs.com/wk23415/archive/2011/04/06/2006436.html
總結(jié)
以上是生活随笔為你收集整理的[ZZ]强签名的由来和作用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
                            
                        - 上一篇: 用DTS将 SQLServer 导出到
 - 下一篇: firefox扩展开发(四) : 更多的