一個(gè)程序集包括四個(gè)區(qū)分彼此的屬性:
l 文件名(不包括擴(kuò)展)
l 版本號(hào)
l 文化標(biāo)識(shí)
l 公鑰標(biāo)識(shí)
現(xiàn)在讓我們來(lái)看看一個(gè)比較常見(jiàn)的強(qiáng)名稱程序集:
l Name= MSCorLib
l Version=1.0.3300.0
l Culture=neutral
l PublicKeyToken=b77a5c561934e089
如果我們自己編寫一個(gè)弱名稱程序集,那么通常PublicKeyToken這一項(xiàng)就沒(méi)有。
下面我嘗試著說(shuō)一說(shuō)強(qiáng)名稱的機(jī)制。
首先,你通過(guò)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)證通過(guò)。
最后,說(shuō)說(shuō)公鑰標(biāo)識(shí)(公鑰的散列值的最后八個(gè)字節(jié))的作用:
l 區(qū)分程序集,上面提到過(guò)它是程序集區(qū)分彼此的四大屬性之一
l 驗(yàn)證公鑰
總的來(lái)說(shuō),強(qiáng)名稱機(jī)制最起碼起到兩個(gè)作用:
l 區(qū)分程序集
l 避免程序集被惡意更改
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!