密鑰文件snk

       在.net中,snk用於給應用程序集簽名,保證應用程序集的有效性。 強命名程序集的緣由:目前Windows中出現的DLL Hell問題(兩個不同的公司可能開發處具有相同名稱的程序集,如果將相同名稱的程序 集放置到同一個目錄下,則會出現程序集覆蓋現象,最後安裝的程序集會覆蓋前面的程序集,從而可能導致應用序不能正常運行)。由此看來,僅靠名稱來區分程序集是不足夠的。

     

      CLR採取了強命名程序集的方式來唯一的表示程序集。強命名程序集包含四個標識:名稱,版本號,語言文化標識和一個共有/私有密鑰對。兩種 程序集/兩種部署方式:.Net支持兩種程序集:弱命名程序集和強命名程序集(注:.Net框架中沒有弱命名程序集,只是爲了和強命名程序集相對應而 已)。弱命名程序集和強命名程序集在結構上是相同的。他們都採用PE文件格式,包含PE表頭,CLR表頭,元數據和清單表。區別在於:強命名程序集擁有一 個發佈者的公鑰/私鑰簽名對,他們用於唯一的標識程序集的發佈者。通過公鑰/私鑰對,我們可以對程序集進行唯一的標識,安全策略和版本策略。

 

      VS2005中,強命名的原理: 先利用SN.exe這個工具生成一個比如SampleKey.snk的文件,這個文件的英文原文叫string name key file,然後用加密的算法根據SampleKey.snk生成一個SampleKeyPublic.snk.最後在根據SampleKeyPublic.snk提取一個public key token ,public key token是一個16位的數字和字母混合的數(我不敢確定是不是十六進制數):

大致流程如下: SampleKey.snk --根據一定的算法--> SampleKeyPublic.snk---->public key token 所以我們只要SampleKey.snk和public key token就可以了,SampleKeyPublic.snk就沒什麼用了.

實際操作如下:

1.打開SDK Command Prompt或者VS2005中的Visual Studio 2005 Command Prompt.而不是windows的cmd

2.輸入sn -k SampleKey.snk,得到的文件在命令提示符的當前文件夾下(微軟叫文件夾很少叫目錄,最正點是folder)

3.輸入sn -p SampleKey.snk SampleKeyPublic.snk

4.輸入sn -t SampleKeyPublic.snk 得到public key token

打開VS2005,找到項目,然後右擊"項目名"找到"屬性","屬性"裏面有個"簽名"的選項卡,然後鉤上 "爲程序集簽名",再"選擇強名稱密鑰文件".做完了操作,然後記得保存,編譯

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