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