AssemblyInfo.cs的做用

總結:用來設置項目生成的dll的常規信息。(如版本、版權等等)它就至關於一個資源文件,存放資源信息。html

http://www.cnblogs.com/xuyuantao/articles/927285.htmlgit

AssemblyInfo.cs主要用來設定生成的有關程序集的常規信息dll文件的一些參數請看如下具體說明: 
//備註: 
[assembly:AssemblyDescription("用最強的搶劫類寫成!")] 
//產品名稱 
[assembly:AssemblyProduct("產品名稱 ")] 
//公司 
[assembly:AssemblyCompany("公司")]
//合法商標 
[assembly:AssemblyTrademark("合法商標")];
//內部名稱 
[assembly:AssemblyCulture("")]
//設計者 
[assembly:AssemblyDescription("設計者 ")] 
//版權 
[assembly:AssemblyCopyright("版權")] 
//配置文件 
[assembly:AssemblyConfiguration("Configuration")] 
//產品版品: 可指定,以下 
// 程序集的版本信息由下列 4 個值組成: // 
// 主版本 
// 次版本 
// 內部版本號 
// 修訂號 // 
// 您能夠指定全部這些值,也可使用「修訂號」和「內部版本號」的默認值,方法是按 
// 以下所示使用 '*': [assembly:AssemblyVersion("1.0.*")] 生成dll文件之後再點擊右鍵看看它的屬性,你就爲在裏面看到熟悉的內容了.

若是你使用.NET做爲開發工具很長時間了,你確定回會碰到「強名」(strong name)這個概念。這個概念並不意味你的組件命名方式必須相似於MyCompany.Gorilla.Biceps的方式。強名的力量體如今對組件的保護方面,.NET Framework使用強名來標識組件和保護組件使其免遭破壞。在這篇文章中我將說明如何創建強名,以及在.NET中使用強名的技巧。


1. 散列和簽名 爲了瞭解強名的工做原理,你必須首先理解密碼學方面的兩個概念:散列(hashing)和數字簽名(digital signatures)。散列是用來爲明文(plaintext)信息建立一個惟一的壓縮的值。這裏的「信息」是一個很普遍的概念,對於組件來講,信息就是它自己。如圖1所示,信息做爲散列做爲散列算法的輸入而被處理,對於強名狀況,採用SHA1算法。 

散列是不可逆的,一旦計算出來,是不可能解密的。可是,散列在比較值方面是很是有用的。若是兩個組件生成一樣的散列值,你能夠認爲這兩個組件是相同的。相反,經過散列計算出來的值和之前計算的值不同,說明組件中某個地方被修改了。 所以經過散列值你就能夠知道,組件是否被修改或破壞。然而你怎樣經過散列值來防止別人對你的組件的修改呢?下面就是我要講的「數字簽名」。 雖然數字簽名的具體數學原理很複雜,可是概念很簡單。一個數字簽名依賴於兩個相關的數字:公共祕匙(public key)和私有密匙(private key)。如圖2所示,當數據經過公共祕匙加密後,它只能經過私有密匙來解密,反之亦然。 

2. 組件的強名 在.NET中共同使用散列和數字簽名就可以保護你的組件免遭破壞。其原理如圖3所示,首先從組件產生一個散列值,而後這個散列值經過你的私有密匙被加密,而後這個散列值和公共密匙被一塊兒防止在組件中。 
在運行的時候,公共語言運行時(CLR)經過比較散列值驗證組件。首先公共的密匙用來解密散列,從當前的組件中計算出一個新的散列。若是它和原來的值吻合,那就經過了驗證
那麼若是一個組件在簽名以後被破壞將會發生什麼樣的狀況呢?顯然,在運行時從組件中計算出來的散列值將不會與存儲在組件中經過私有密匙加密的散列值吻合,這樣公共語言運行時將拒絕加載該組件。 

注意強名只是保證了組件的完整性,而並不是它的安全性,沒有什麼辦法來防止某我的建立一個惡意的組件,並經過強名來給它簽名。你能夠經過強名來驗證某個組件在簽名後是否被破壞。基於你對於信息的選擇。這一切將由你來決定是否相信從某個地方來的組件和代碼信息。 

3.強名的其它信息 

除了從組件內容求出來的散列,強名還包含一下三個方面的信息。 

l 組件簡單文本名稱 

l 組件版本號 

l 組件的語言文化代碼 

全部的這些信息,將爲每一個組件提供惟一的標識。有了這些信息,公共語言運行時能夠決定一個組件是否被另外一個組件經過引用的方式調用。當你從一個組件引用另外一個組件,該組件將存儲被調用組件的公共密匙。在運行的時候,公共語言運行時將經過這些來判斷該組件是否來自正確的供應商。另外強名中的其它信息用來判斷組件是否符合引用的綁定策略(binding policy)的要求。 

4.使用強名的技巧 

.NET Framwork SDK和 Visual Studio.NET爲指定強名提供了不少的工具,這是頗有意義的,由於經過Visual Studio.NET來建立組件具備更多的選擇。在你簽名以前你必須建立一對密匙(公共密匙和私有密匙),一般密匙對放置在以.snk結尾的文件中。能夠經過強名工具sn.exe來實現。 

sn -k MyKeyFile.snk 
若是你使用命令行編譯器(vbc.exe或者csc.exe),你就能夠爲組件鏈接器al.exe,指定密匙對。以下面的命令行所示,你能夠將存儲在MyKeyFile.snk中的密匙對做爲MyFile.dll的簽名。 

al /out:MyFile.dll MyFile.netmodule /keyfile:MyKeyFile.snk 
若是你使用Visual Studio .NET,你仍然能夠經過命令行的方式產生你的密匙對。有了密匙對以後你就能夠經過設定在組件信息文件(AssemblyInfo.vb 或者semblyInfo.cs)的【AssemblyKeyFile】屬性來把它包含到組件中。例如C#工程,你能夠經過該屬性包含密匙文件而生成一個簽名組件。 

[assembly: AssemblyKeyFile("..\\..\\MyKeyFile.snk")] 

從被編譯的組件到密匙文件,【AssemblyKeyFile】屬性中的文件名必須包含完整的相對路徑。 

5.經過延遲簽名加密 

保護你的私有密匙是很是重要的,若是某個惡意的人取得了你的密匙,他生成的組件將和你簽過名的組件同樣。所以,應當把你的密匙設於高度的保密狀態,公司裏面可能就只有幾我的知道。這樣以來,又怎麼給你的組件簽名呢?若是就只有你一我的知道密匙,這樣會很繁瑣,由於你必須爲公司中每一個開發者開發出來的每一個組件簽名。 

很幸運的是.NET爲這個問題提供了一個很好的方法:延遲簽名。經過延遲簽名,你能夠在只知道公共密匙的狀況下建立和測試組件。只有在組件實際分發給用戶時纔將私有密鑰匙包含到組件。下面是使用延遲簽名過程的一些技巧總結: 

1. 從公共/私有密鑰匙對中提取公共密匙。爲了提取公共密匙,也就是存儲公共/私有密匙對,你可使用強名工具,命令行以下: 

sn.exe -p MyKeyFile.snk MyPublicKeyFile.snk 

2. 將包含公共密匙的文件分發給公司全部的開發者,同時將包含公共/私有密鑰匙對的文件安全存放。 

3. 在組件信息文件中包含公共密匙的文件,並註明延遲簽名。 

[assembly: AssemblyDelaySign(true)] 
[assembly: AssemblyKeyFile("..\\..\\MyPublicKeyFile.snk")] 
若是你使用組件鏈接工具,而非Visual Studio .NET,你可使用/delaysign命令行來代表延遲簽名。 

4. 若是你把組件保存在全局程序集緩存(GAC)中,應關閉對組件的驗證,由於GAC默認驗證每一個組件的強名。若是組件沒有采用私有密鑰匙來簽名,這個驗證將會失敗。所以,出於開發和測試的目的你能夠輸入以下的命名行: 

sn.exe -Vr MyFile.dll 

5. 這樣,你就能夠在開發和測試的時候很自由的使用組件 

6. 當部署一個延遲簽名的組件的時候,你必須經過私有密匙來給它簽名。 

sn.exe -R MyFile.dll MyKeyFile.snk 

7. 最後,你必須通知GAC從新開啓對組件的驗證。命名行以下: 

sn.exe -Vu MyFile.dll 
6.可信任計算(TrsutWorthy Computing) 

你確定據說過微軟的「可信任計算」措施,它包含了有關微軟產品的不少安全方面的措施。微軟正慢慢的並且必然的朝着一個方向發展,那就是他們將使他們全部的軟件產品是默認安全的。若是你知道你在作什麼,你就能夠下降軟件(如Windows Server 2003)的安全級別。雖然下降了安全級別,但太可能使你受到突發事件的攻擊。 

當你給你的組件賦予強名,你在作就是「可信任計算」。經過強名來分發你的組件,會使得組件不太可能成爲木馬和其餘攻擊計算機黑客程序的載體。.NET Framework和Visual Studio .NET提供的工具保證了你分發組件的完整性。所以我強烈建議你使用這些工具,經過這些工具來使得計算世界變得更安全一點。 web

相關文章
相關標籤/搜索