.NET強名稱工具(Sn.exe)使用詳解

iDotNetSpace發表於2010-01-13

  語法格式:
sn [-quiet][option [parameter(s)]]

  引數及選項說明

-c [csp]
 將預設加密服務提供程式 (CSP) 設定為用於強名稱簽名。此設定應用於整臺計算機。如果不指定 CSP 名稱,則 Sn.exe 將清除當前設定。

-d container
 從強名稱 CSP 中刪除指定的金鑰容器。

-D assembly1 assembly2
 驗證兩個程式集是否只是簽名不同。這經常用作使用不同的金鑰對重新為程式集建立簽名後的檢查。

-e assembly outfile
 從 assembly 中提取公鑰並將其儲存在 outfile 中。

-h
 顯示該工具的命令語法和選項。

-i infile container
 從指定金鑰容器中的 infile 安裝金鑰對。金鑰容器位於強名稱 CSP 中。

-k [keysize] outfile
 生成一個指定大小的新 RSACryptoServiceProvider 金鑰並將其寫入指定的檔案。公鑰和私鑰都寫入該檔案。
 如果不指定金鑰大小,並且已安裝了 Microsoft Enhanced Cryptographic Provider,則預設情況下生成 1,024 位的金鑰;否則,生成 512 位的金鑰。
 如 果安裝了 Microsoft Enhanced Cryptographic Provider,則 keysize 引數支援 384 位至 16,384 位(增量為 8 位)的金鑰長度。如果安裝了 Microsoft Base Cryptographic Provider,則支援 384 位至 512 位(增量為 8 位)的金鑰長度。

-m [y|n]
 指定金鑰容器是計算機特定的還是使用者特定的。如果指定 y,則金鑰容器是計算機特定的。如果指定 n,則金鑰容器是使用者特定的。
 如果既沒有指定 y 也沒有指定 n,則此選項顯示當前設定。

-o infile [outfile]
 從 infile 中提取公鑰並將其儲存在 .csv 檔案中。公鑰的每一位元組都由逗號分隔。這種格式對於通過硬編碼在原始碼中將公鑰作為初始化陣列引用很有用。如果不指定 outfile,則此選項將輸出放到剪貼簿上。

-p infile outfile
 從 infile 中的金鑰對提取公鑰並將其儲存在 outfile 中。此公鑰可用於通過程式集連結器 (Al.exe) 的 /delaysign+ 和 /keyfile 選項對程式集進行延遲簽名。如果延遲建立程式集的簽名,則在編譯時只設定公鑰,並在檔案中為以後知道公鑰時新增的簽名保留空間。

-pc container outfile
 從 container 中的金鑰對中提取公鑰並將其儲存在 outfile 中。

-q[uiet]
 指定安靜模式;取消顯示成功訊息。

-R[a] assembly infile
 使用 infile 中的金鑰對,重新簽名先前已簽名的程式集或延遲已簽名的程式集。
 如果使用 -Ra,則重新計算程式集中所有檔案的雜湊。

-Rc[a] assembly container
 使用容器中的金鑰對,重新簽名先前已簽名的程式集或延遲已簽名的程式集。
 如果使用 -Rca,則重新計算程式集中所有檔案的雜湊。

-Rh assembly
 重新計算程式集中所有檔案的雜湊。
 
-t[p] infile
 顯示儲存在 infile 中的公鑰的標記。infile 的內容必須是以前使用 -p 從金鑰對檔案生成的公鑰。不要使用 -t[p] 選項直接從金鑰對檔案提取該標記。
 Sn.exe 使用公鑰中的雜湊函式計算該標記。為節省空間,公共語言執行庫在記錄對具有強名稱的程式集的依賴性時,將公鑰標記儲存在清單中,作為對另一個程式集的引用的一部分。-tp 選項除顯示標記外還顯示公鑰。
 請注意,此選項不驗證程式集簽名,而且不應用於做出信任決策。此選項僅顯示原始公鑰標記資料。

-T[p] assembly
 顯示 assembly 的公鑰標記。assembly 必須是包含程式集清單的檔案的名稱。
 Sn.exe 使用公鑰中的雜湊函式計算該標記。為節省空間,公共語言執行庫在記錄對具有強名稱的程式集的依賴性時,將公鑰標記儲存在清單中,作為對另一個程式集的引用的一部分。-Tp 選項除顯示標記外還顯示公鑰。
 請注意,此選項不驗證程式集簽名,而且不應用於做出信任決策。此選項僅顯示原始公鑰標記資料。

 

 

-v assembly
 驗證 assembly 中的強名稱,其中 assembly 是包含程式集清單的檔名。

-vf assembly
 驗證 assembly 中的強名稱。與 -v 選項不同,-vf 強制實施驗證,即使已使用 -Vr 選項禁用了驗證。

-Vl
 列出此計算機上的強名稱驗證的當前設定。

-Vr assembly [userlist] [infile]
 註冊 assembly 以跳過驗證。或者,可以指定用逗號分隔的使用者名稱列表。如果指定 infile,則驗證保持啟用,但 infile 中的公鑰將用於驗證操作。可以 *, strongname 的形式指定程式集,以註冊所有具有指定強名稱的程式集。Strongname 應指定為十六進位制數字的字串以表示標記形式的公鑰。參見 -t 和 -T 選項以顯示公鑰標記。

警告
僅在開發期間使用此選項。將程式集新增到跳過驗證列表會產生安全漏洞。如果將某程式集新增到跳過驗證列表中,則惡意的程式集可以通過使用該程式集的完全限定程式集名稱來隱藏身份,完全限定程式集名稱由程式集名稱、版本、區域性和公鑰標記組成。這使惡意程式集也可以跳過驗證。

-Vu assembly
 登出 assembly,不跳過驗證。應用於 -Vr 的同一程式集命名規則也應用於 -Vu。

-Vx
 移除所有驗證跳過項。

-?
 顯示該工具的命令語法和選項。

注意
所有 Sn.exe 選項都區分大小寫,並且必須完全按上面顯示的樣子鍵入才可以被此工具識別。
 
備註
-R 和 –Rc 選項對被延遲簽名的程式集很有用。在此方案中,編譯時只設定公鑰,並且以後知道私鑰時執行簽名。

  示例

下面的命令建立一個新的隨機金鑰對並將其儲存在 keyPair.snk 中。
sn -k keyPair.snk

下面的命令將 keyPair.snk 中的金鑰儲存在強名稱 CSP 中的容器 MyContainer 中。
sn -i keyPair.snk MyContainer

下面的命令從 keyPair.snk 中提取公鑰並將其儲存在 publicKey.snk 中。
sn -p keyPair.snk publicKey.snk

下面的命令顯示公鑰和 publicKey.snk 包含的公鑰的標記。
sn -tp publicKey.snk

下面的命令驗證程式集 MyAsm.dll。
sn -v MyAsm.dll

下面的命令從預設 CSP 中刪除 MyContainer。
sn -d MyContainer

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-625035/,如需轉載,請註明出處,否則將追究法律責任。

相關文章