共用方式為


Sn.exe (強式名稱工具)

更新:2011 年 4 月

強式名稱工具 (Sn.exe) 可以協助您以強式名稱簽署組件。 Sn.exe 提供了金鑰管理、簽章產生和簽章驗證的選項。

注意事項注意事項

在 64 位元電腦上,請使用 Visual Studio 命令提示字元執行Sn.exe 的 32 位元版本,並使用 Visual Studio x64 Win64 命令提示字元執行 64 位元版本。

這個工具會自動隨 Visual Studio 和 Windows SDK 一起安裝。 若要執行工具,建議您使用 Visual Studio 命令提示字元或 Windows SDK 命令提示字元。 這些公司可讓您輕鬆地執行工具,而不需瀏覽至安裝資料夾。 如需詳細資訊,請參閱Visual Studio 和 Windows SDK 命令提示字元

  • 如果您已經在電腦上安裝 Visual Studio:在工作列上,依序按一下 Start、All Programs、Visual Studio、Visual Studio Tools,然後按一下 Visual Studio Command Prompt。

    -或-

    如果您已經在電腦上安裝 Windows SDK:在工作列上,依序按一下 Start、All Programs、Windows SDK 的資料夾,然後按一下Command Prompt(或 CMD Shell)。

  • 在命令提示字元中輸入下列文字:

sn [-quiet][option [parameter(s)]]

參數

選項

描述

-c [csp]

設定預設的密碼編譯服務提供者 (CSP) 以用於強式名稱簽署。 這個設定值會套用到整個電腦。 如果沒有指定 CSP 名稱,Sn.exe 會清除目前的設定值。

-d container

從強式名稱 CSP 刪除指定的金鑰容器 (Container)。

-D assembly1 assembly2

驗證兩個只由簽章所區分的組件。 這通常用來做為在以不同的金鑰組 (Key Pair) 重新簽署組件之後的檢查。

-e assembly outfile

assembly 擷取公開金鑰 (Public Key),然後存放到 outfile

-h

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

-iinfile container

從指定金鑰容器中的 infile 安裝金鑰組。 金鑰容器屬於強式名稱 CSP。

-k [keysize] outfile

產生指定大小的新 RSACryptoServiceProvider 金鑰,並將它寫入指定的檔案中。 公開和私密金鑰都會寫入檔案。

如果您沒有指定金鑰大小,則若已安裝 Microsoft 增強型密碼編譯提供者,預設會產生 1,024 位元的金鑰,否則會產生 512 位元的金鑰。

如果已安裝 Microsoft 增強型密碼編譯提供者,則 keysize 參數支援的金鑰長度會從 384 位元到 16,384 位元,其增量為 8 位元。 如果已安裝 Microsoft 基底密碼編譯提供者,則支援的金鑰長度會從 384 位元到 512 位元,其增量為 8 位元。

-m y|n]

指定金鑰容器是電腦專屬或使用者專屬的。 如果指定 y,金鑰容器是電腦專屬的。 如果指定 n,金鑰容器是使用者專屬的。

如果都不指定 y 和 n,這個選項會顯示目前的設定值。

-o infile [outfile]

infile 擷取公開金鑰,然後存放到 .csv 檔案。 逗號會分隔公開金鑰的每一個位元組。 這個格式對金鑰的硬式程式碼撰寫參考很有幫助,如同原始程式碼中的初始陣列。 如果沒有指定 outfile,這個選項會將輸出放置到剪貼簿。

注意事項注意事項
這個選項不會驗證輸出只是公開金鑰。如果 infile 包含具有私密金鑰的金鑰組,該私密金鑰也會受到擷取。

-pinfile outfile

infile 中的金鑰組擷取公開金鑰,然後存放到 outfile。 您可以使用組件連結器 (Al.exe)/delaysign+/keyfile 選項,將這個公開金鑰用來延遲簽署組件。 當延遲簽署組件時,在編譯時期只會設定公開金鑰,而檔案中會為簽章保留空間,以便稍後知道私密金鑰時再加入簽章。

-pc container outfile

container 中的金鑰組擷取公開金鑰,並且將它儲存在 outfile 中。

-Pb [y|n]

指定是否要強制執行強式名稱略過原則。 如果指定 y,則在將完全信任組件載入至完全信任的 AppDomain 時,就不會驗證其強式名稱。 如果指定 n,就會驗證強式名稱的正確性,但不是針對特定的強式名稱進行驗證。 StrongNameIdentityPermission 對於完全信任的組件沒有任何影響。 您必須執行自己的強式名稱比對檢查。

如果都沒有指定 y 或 n,這個選項會顯示目前的設定。 預設值為 y。

注意事項注意事項
在 64 位元電腦上,對於 Sn.exe 的 32 位元和 64 位元執行個體,都必須設定這個參數。

-q[uiet]

指定安靜模式;隱藏成功訊息的顯示。

-R[aassembly infile

infile 中的金鑰組重新簽署先前已簽署或延遲簽署的組件。

如果使用 -Ra,則會針對組件中的所有檔案重新計算雜湊。

-Rc[aassembly container

container 中的金鑰組重新簽署先前已簽署或延遲簽署的組件。

如果使用 -Rca,則會針對組件中的所有檔案重新計算雜湊。

-Rh assembly

針對組件中的所有檔案重新計算雜湊。

-t[p] infile

顯示存放在 infile 中公開金鑰的語彙基元 (Token)。 infile 的內容必須是先前使用 -p 從金鑰組檔案中產生的公開金鑰。 請勿使用 -t[p] 選項,直接從金鑰組檔案中抽取語彙基元。

Sn.exe 使用公開金鑰中的雜湊函式來計算語彙基元。 為了節省空間,Common Language Runtime 在將相依性記錄到具有強式名稱的組件時,會將公開金鑰語彙基元存放到資訊清單做為其他組件參考的一部分。 除了語彙基元之外,-tp 選項還顯示公開金鑰。

請注意,這個選項不會驗證組件簽署,且不應該用來進行信任決策。 這個選項僅會顯示未經處理的公開金鑰語彙基元資料。

-T[p] assembly

顯示組件的公開金鑰語彙基元 (Token)。assembly 必須是含有組件資訊清單的檔案名稱。

Sn.exe 使用公開金鑰中的雜湊函式來計算語彙基元。 為了節省空間,執行階段在將相依性記錄到具有強式名稱的組件時,會將公開金鑰語彙基元存放到資訊清單做為其他組件參考的一部分。 除了語彙基元之外,-Tp 選項還顯示公開金鑰。

請注意,這個選項不會驗證組件簽署,且不應該用來進行信任決策。 這個選項僅會顯示未經處理的公開金鑰語彙基元資料。

-TSassembly infile

以 infile 中的金鑰組,對已簽署或部分簽署的 assembly 進行簽署測試。

-TSc assembly container

以金鑰容器 container 中的金鑰組,對已簽署或部分簽署的 assembly 進行簽署測試。

-vassembly

驗證 assembly 中的強式名稱,其中 assembly 是含有組件資訊清單的檔案名稱。

-vf assembly

驗證 assembly 中的強式名稱。-v 選項不同,即使使用 -Vr 選項來停用 -vf,它還是會強制驗證。

-Vl

列出這部電腦上強式名稱驗證的目前設定值。

-Vr assembly [userlist] [infile]

註冊驗證略過的 assembly。 您可以選擇性指定使用者名稱的逗號分隔清單。 如果指定 infile,驗證會保持啟用狀態,不過 infile 中的公開金鑰會被用於驗證作業中。 您可以 *, strongname 格式指定 assembly,來註冊所有具有指定強式名稱的組件。 Strongname 應該被指定為十六進位數字的字串,表示公開金鑰的語彙基元形式。 若要顯示公開金鑰語彙基元,請參閱 -t-T 選項。

注意事項警告
只能在開發期間使用這個選項。將組件加入至略過驗證清單會使安全性變弱。具有惡意的組件可能使用加入至略過驗證清單之組件的完全指定組件名稱 (組件名稱、版本、文化特性和公開金鑰語彙基元),以偽裝其識別 (Identity)。這會使具有惡意的組件也略過驗證。

-Vu assembly

移除註冊驗證略過的 assembly。 套用到 -Vr 與套用到 -Vu 的組件命名的規則 (Rule) 相同。

-Vx

移除所有驗證略過的項目。

-?

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

注意事項注意事項

所有的 Sn.exe 選項都有區分大小寫,而且必須完全依照所顯示的內容進行輸入,工具才能夠辨認。

備註

-R–Rc 選項與已延遲簽署的組件一起使用時非常有用。 在這個案例中,在編譯時期只會設定公開金鑰,而當稍後知道私密金鑰時才會執行簽署。

注意事項注意事項

若為參數 (例如,-Vr),寫入登錄之類的受保護資源,以管理員身分執行 SN.exe。

範例

下列命令會建立新的隨機金鑰組,並且將它儲存在 keyPair.snk 中。

sn -k keyPair.snk

下列命令會將金鑰儲存在強式名稱 CSP 中的 MyContainer 容器的 keyPair.snk 中。

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

請參閱

參考

Al.exe (組件連結器)

Visual Studio 和 Windows SDK 命令提示字元

概念

強式名稱的組件

其他資源

.NET Framework 工具

變更記錄

日期

記錄

原因

2011 年 4 月

加入使用 Visual Studio 和 Windows SDK 命令提示字元的相關資訊。

資訊加強。

2010 年 8 月

新增關於在 64 位元電腦上執行該工具的資訊。

資訊加強。