Поделиться через


Проверка подписи документа

[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