強簽名:
1. 可以將強簽名的dll注冊到GAC,不同的應用程序可以共享同一dll。
2. 強簽名的庫,或者應用程序只能引用強簽名的dll,不能引用未強簽名的dll,但是未強簽名的dll可以引用強簽名的dll。
3. 強簽名無法保護源代碼,強簽名的dll是可以被反編譯的。
4. 強簽名的dll可以防止第三方惡意篡改。
強簽名的方法:
1. 有源代碼:
1.1 使用vs tool command:snk –k mykey.snk 生成簽名公鑰。
1.2 將公鑰加入項目中,並設置項目屬性,設置簽名公鑰
1.3 重新生成項目。
2. 沒有源代碼。
2.1 創建強簽名鍵:
sn.exe -k key.snk
2.2 反匯編dll為il
ILDASM.exe SomeLibrary.dll /OUTPUT=SomeLibrary.il
該指令會反匯編該dll並生成SomeLibrary.il,如果該dll含有嵌入的resource,
則會有SomeLibrary.res文件產生,並有相應的嵌入資源文件產生。
2.3 重新匯編為dll
ILASM.exe SomeLibrary.il /DLL /OUTPUT=SomeLibrary.dll /KEY=key.snk
如果有嵌入的資源文件,則需要加上 /RESOURCE=SomeLibrary.res
強簽名的dll與未簽名的在反編譯後的區別:
未簽名的:
強簽名的:
更多詳細信息參考 StringNaming
http://windowsdevcenter.com/pub/a/dotnet/2003/04/28/strongnaming.html