snk 與pfx

 

snk 1用來證明這個生成的程序集是你發佈的; 2如果你寫的程序集要用在多個應用程序上的話,那麼這個程序集必須要擁有唯一的名稱,這個強名稱是程序集唯一名稱的一部分。   3只要你保護好你的snk文件不要公佈出去,那麼沒有任何人可以假冒你發佈程序集。         強名稱簽名的原理是不對稱簽名驗證算法。         首先你用sn.exe命令行程序生成一個.snk的密鑰文件,這個文件包括了兩個部分的內容。     1   私鑰,就是在vs.net編譯的時候生成驗證碼的東西。     2   公鑰,編譯的時候打包到程序集元數據中PublicKey部分的內容。        

而且,驗證碼只能通過私鑰來生成,只有通過私鑰生成的驗證碼才能通過.Net   CLR的驗證。         CLR驗證程序集的時候通過讀取公鑰來生成驗證對象,生成過後對整個程序集的內容進行驗證,拿這個驗證碼與程序集裏面的驗證碼對比,如果吻合就通過,如果不吻合表示程序集已經被修改了,CLR將拒絕載入這個程序集並且認爲需要的程序集沒有找到,拋出FileNotFoundException異常。         比如說微軟的.Net類庫中的System.dll、System.Web.dll等,都經過了強名稱驗證,保證別人只能使用這些類庫,而不能修改,還保證這些程序集是微軟推出的。而且,這些程序集是存放在共享目錄裏面的,更加需要強名稱了。

創建SNK文件,2種辦法

1 我們在vs.net的命令行模式(開始——〉程序——〉Microsoft Visual Studio.net 2003——〉Visual Studio.net工具——〉Visual Studio.net命令提示)裏面輸入:sn -k xxxx.snk

xxxx.snk就是你需要的數字簽名文件。

使用: 先將snk文件存放到一文件夾(key); 在AssemblyInfo.cs文件裏面包含有所有版本數字和所有數字簽名文件的引用。我們將修改這一文件裏面的 [assembly:AssemblyKeyFile("")]爲:[assembly:AssemblyKeyFile(@"/key/xxxx.snk")]

這樣就完成創建。

2 在 Visual Studio 2005 中,通過 C#、Visual Basic 和 Visual J# 集成開發環境 (IDEs) 可以生成密鑰對,並且無需使用 Sn.exe 創建密鑰對即可對程序集進行簽名。以上 IDE 在“項目設計器”中具有“簽名”選項卡。生成文件pfx與snk文件一樣,都可以用來給程序集加上強名稱,但是pfx是在加的過程中,需要設置密碼的。如果想創建SNK文件則選中“使用密碼保護密鑰文件”,這樣會生成一個擴展名爲snk的文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章