.NET中的強名稱機制
發(fā)表時間:2023-07-30 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]一個程序集包括四個區(qū)分彼此的屬性:l 文件名(不包括擴展)l 版本號l 文化標(biāo)識l 公鑰標(biāo)識現(xiàn)在讓我們來看看一個比較常見的強名稱程序集...
一個程序集包括四個區(qū)分彼此的屬性:
l 文件名(不包括擴展)
l 版本號
l 文化標(biāo)識
l 公鑰標(biāo)識
現(xiàn)在讓我們來看看一個比較常見的強名稱程序集:
l Name= MSCorLib
l Version=1.0.3300.0
l Culture=neutral
l PublicKeyToken=b77a5c561934e089
如果我們自己編寫一個弱名稱程序集,那么通常PublicKeyToken這一項就沒有。
下面我嘗試著說一說強名稱的機制。
首先,你通過SN.exe獲得一個公鑰和一個密鑰。
然后,使用公鑰對程序集的可執(zhí)行文件(不包括DOS頭、PE頭等)進行哈希算法,得到一個文件散列值。
最后,使用密鑰對文件散列值進行加密,得到一個密文。
這樣,最后的強名稱程序集里面要三樣?xùn)|西:
l 公鑰標(biāo)識(公鑰的散列值的最后八個字節(jié))
l 公鑰
l 密文
使用公鑰和程序集的可執(zhí)行文件(不包括DOS頭、PE頭等)進行哈希算法可以得到一個文件散列值,使用公鑰和密文也可以得到一個文件散列值,如果這兩個散列值完全一致,OK,驗證通過。
最后,說說公鑰標(biāo)識(公鑰的散列值的最后八個字節(jié))的作用:
l 區(qū)分程序集,上面提到過它是程序集區(qū)分彼此的四大屬性之一
l 驗證公鑰
總的來說,強名稱機制最起碼起到兩個作用:
l 區(qū)分程序集
l 避免程序集被惡意更改