CryptVerifySignatureA 函式 (wincrypt.h)
呼叫此函式之前,必須先呼叫 CryptCreateHash ,才能建立哈希物件的句柄。 CryptHashData 或 CryptHashSessionKey 接著會用來將數據或 會話索引鍵 新增至哈希物件。
CryptVerifySignature 完成之後,只能使用 hHash 句柄呼叫 CryptDestroyHash。
語法
BOOL CryptVerifySignatureA(
[in] HCRYPTHASH hHash,
[in] const BYTE *pbSignature,
[in] DWORD dwSigLen,
[in] HCRYPTKEY hPubKey,
[in] LPCSTR szDescription,
[in] DWORD dwFlags
);
參數
[in] hHash
要驗證之哈希物件的句柄。
[in] pbSignature
要驗證之簽章數據的位址。
[in] dwSigLen
pbSignature 簽章數據中的位元元組數目。
[in] hPubKey
用來驗證簽章之 公鑰 的句柄。 此公鑰必須屬於原本用來建立數位簽名的金鑰組。
[in] szDescription
此參數不應再使用,而且必須設定為 NULL 以防止安全性弱點。 不過,在 Microsoft 基底密碼編譯提供者中仍支援回溯相容性。
[in] dwFlags
定義下列旗標值。
值 | 意義 |
---|---|
|
此旗標會與 RSA 提供者搭配使用。 驗證簽章時,不會 (OID) 哈希 對象標識碼 存在或檢查。 如果未設定此旗標,則會驗證預設簽章中的哈希 OID,如 PKCS 中 DigestInfo 的定義中所指定 #7。 |
|
未使用此旗標。 |
|
針對符合 FIPS 186-2 相容版本的 RSA (rDSA) ,請使用 X.931 支援。 |
傳回值
如果函式成功,則傳回值為 TRUE。
如果函式失敗,則傳回值為 FALSE。 如需擴充錯誤資訊,請呼叫 GetLastError。
“NTE” 開頭的錯誤碼是由您使用的特定 CSP 所產生。 以下是一些可能的錯誤碼。
傳回碼 | Description |
---|---|
|
其中一個參數指定無效的句柄。 |
|
其中一個參數包含無效的值。 這通常是無效的指標。 |
|
dwFlags 參數為非零。 |
|
hHash 參數指定的哈希對象無效。 |
|
hPubKey 參數不包含有效公鑰的句柄。 |
|
簽章無效。 這可能是因為數據本身已變更、描述字串不相符,或 由 hPubKey 指定錯誤的公鑰。
如果哈希或簽章演算法不符合用來建立簽章的演算法,也可以傳回此錯誤。 |
|
找不到建立哈希物件時指定的 密碼編譯服務提供者 (CSP) 內容。 |
|
CSP 在作業期間記憶體不足。 |
備註
CryptVerifySignature 函式會完成哈希。 在此呼叫之後,就無法再將數據新增至哈希。 對 CryptHashData 或 CryptHashSessionKey 的其他呼叫會失敗。 使用哈希完成應用程式之後,應該呼叫 CryptDestroyHash 來終結哈希物件。
如果您使用 .NET Framework API 產生簽章,並嘗試使用 CryptVerifySignature 函式來驗證簽章,則函式將會失敗,GetLastError 會傳回NTE_BAD_SIGNATURE。 這是因為原生 Win32 API 與 .NET Framework API 之間的位元組順序不同。
原生密碼編譯 API 會使用小數位節順序,而 .NET Framework API 則使用大位元組位元組順序。 如果您要使用 .NET Framework API 來驗證產生的簽章,您必須先交換簽章位元組的順序,才能呼叫 CryptVerifySignature 函式來驗證簽章。
範例
如需使用 CryptVerifySignature 函式的範例,請參閱 範例 C 程式:簽署哈希並驗證哈希簽章。
注意
wincrypt.h 標頭會根據 UNICODE 預處理器常數的定義,將 CryptVerifySignature 定義為自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | wincrypt.h |
程式庫 | Advapi32.lib |
Dll | Advapi32.dll |