SignedData.Sign 方法

[ Sign 方法可用於需求一節中指定的作業系統。 請改用System.Security.Cryptography.Pkcs命名空間中的SignedCms 類別。]

Sign方法會在要簽署的內容上建立數位簽章。 數位簽章是由要使用簽署者私密金鑰加密的內容 雜湊 所組成。 這個方法只能在 SignedData.Content 屬性初始化之後使用。 如果在已經有簽章的物件上呼叫 Sign 方法,則會取代舊的簽章。 簽章是使用 SHA1 簽署演算法所建立。

語法

SignedData.Sign( _
  [ ByVal Signer ], _
  [ ByVal bDetached ], _
  [ ByVal EncodingType ] _
)

參數

簽署者 [in, 選擇性]

資料簽署者的 Signer 物件的參考。 Signer物件必須能夠存取用來簽署之憑證私密金鑰。 此參數可以是 Null;如需詳細資訊,請參閱。

bDetached [in, optional]

如果 為 True,則會卸離要簽署的資料;也就是說,簽署的內容不包含為已簽署物件的一部分。 若要驗證中斷連結內容上的簽章,應用程式必須有原始內容的複本。 如果已簽署郵件的收件者具有已簽署資料的原始複本,卸離內容通常用來減少要透過網路傳送的已簽署物件大小。 預設值為 [False]

EncodingType [in, optional]

CAPICOM_ENCODING_TYPE列舉的值,指出簽署的資料如何編碼。 預設值為 CAPICOM_ENCODE_BASE64。 此參數可以是下列其中一個值。

意義
CAPICOM_ENCODE_ANY
只有當輸入資料具有未知的編碼類型時,才會使用此編碼類型。 如果使用此值來指定輸出的編碼類型,則會改用CAPICOM_ENCODE_BASE64。 CAPICOM 2.0 中引進。
CAPICOM_ENCODE_BASE64
資料會儲存為 base64 編碼字串。
CAPICOM_ENCODE_BINARY
資料會儲存為純二進位序列。

 

傳回值

這個方法會傳回字串,其中包含已編碼、帶正負號的資料。

如果此方法失敗,將會擲回錯誤。 Err物件將包含錯誤的其他資訊。

備註

重要

從 Web 腳本呼叫此方法時,腳本必須使用您的私密金鑰來建立數位簽章。 允許不受信任的網站使用您的私密金鑰是安全性風險。 對話方塊,詢問第一次呼叫此方法時,網站是否可以使用您的私密金鑰。 如果您允許腳本使用私密金鑰來建立數位簽章,並選取 [不要再次顯示此對話方塊],則該網域內使用該私密金鑰建立數位簽章的任何腳本將不再顯示此對話方塊。 不過,嘗試使用私密金鑰來建立數位簽章的網域以外的腳本仍會導致此對話方塊出現。 如果您不允許腳本使用私密金鑰,並選取 [不要再次顯示此對話方塊],該網域內的腳本將會自動拒絕使用私密金鑰來建立數位簽章的能力。

 

由於建立 數位簽章 需要使用 私密金鑰,因此嘗試使用此方法的 Web 應用程式會要求使用者介面提示,讓使用者基於安全性考慮核准使用私密金鑰。

下列結果適用于 Signer 參數值:

  • 如果 Signer 參數不是 Null,這個方法會使用相關聯憑證指向的私密金鑰來加密簽章。 如果憑證所指向的私密金鑰無法使用,方法就會失敗。
  • 如果 Signer 參數為 Null ,而且CURRENT_USER MY 存放區中只有一個憑證可存取私密金鑰,該憑證會用來建立簽章。
  • 如果 Signer 參數為 Null則 Settings.EnablePromptForCertificateUI 屬性值為 true,而且在具有可用私密金鑰的 CURRENT_USER MY 存放區中有一個以上的憑證,此時會出現一個對話方塊,可讓使用者選取使用的憑證。
  • 如果 Signer 參數為 Null ,且 Settings.EnablePromptForCertificateUI 屬性為 false,則方法會失敗。
  • 如果 Signer 參數為 Null ,而且在具有可用私密金鑰的 CURRENT_USER my 存放區中沒有憑證,則方法會失敗。

規格需求

需求
可轉散發套件
Windows Server 2003 和 Windows XP 上的 CAPICOM 2.0 或更新版本
DLL
Capicom.dll

另請參閱

密碼編譯物件

SignedData