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的文件。