驗證檔上的簽章
[CAPICOM 是 32 位的僅限元件,可用於下列作業系統:Windows Server 2008、Windows Vista 和 Windows XP。 請改用.NET Framework來實作安全性功能。 如需詳細資訊,請參閱 使用 CAPICOM 的替代方案。]
收到已簽署的檔時,可以檢查簽章或簽章的有效性。 簽章可以檢查是否有:
- 簽章雜湊的有效性
- 簽署者憑證的有效性
簽章雜湊會使用簽署者憑證上找到的公開金鑰解密,並包含在簽章中。 如果解密的簽章符合原始檔案的新雜湊,則簽章是由與用來解密雜湊之公開金鑰相關聯之私密金鑰的擁有者所建立。 此外,簽章根據的檔保證不會在建立簽章之後變更。
提供公開金鑰和簽署者的身分識別的憑證也可以檢查是否有效,包括憑證是否已撤銷、憑證是否已過期,或憑證是否由受信任的憑證簽發者簽發。
在下列範例中,會從檔案讀取已簽署的內容和 SignedData 物件,並檢查用來建立簽章的憑證有效性。
注意
如果簽章不是密碼編譯有效,或簽署者的憑證無效,則會引發例外狀況,而且驗證程式必須處理例外狀況。 在任何 CAPICOM 錯誤上,會傳回負數十進位值為 Err.Number 。 如需詳細資訊,請參閱 CAPICOM_ERROR_CODE。 如需 Err.Number的正十進位值相關資訊,請參閱 Winerror.h。
Sub VerifySig(ByVal FileToVerify As String, ByVal FileBase As String)
On Error GoTo ErrorHandler
Dim sdContent As String
Dim sdCheck As String
Dim mySD As SignedData
Set mySD = New SignedData
' Open a file and read the signature.
Open FileToVerify For Input As #1
Input #1, sdCheck
Close #1
' Open a file and input the plaintext content that was signed.
Open FileBase For Input As #2
Input #2, sdContent
Close #1
' Set the detached content upon which the signature is based.
mySD.Content = sdContent
' Verify the detached signature.
On Error Resume Next
mySD.Verify sdCheck, True
If Err.Number <> 0 Then
MsgBox "Signature verification failed. " & Err.Description
Else
MsgBox "Verification complete."
End If
' Release the SignedData object.
Set mySD = Nothing
Exit Sub
ErrorHandler:
If Err.Number > 0 Then
MsgBox "Visual Basic error found: " & Err.Description
Else
MsgBox "CAPICOM error found: " & Hex(Err.Number)
End If
End Sub