Статус: Новичок
Группы: Участники
Зарегистрирован: 17.08.2016(UTC) Сообщений: 2
Сказал(а) «Спасибо»: 2 раз
|
Здравствуйте, уважаемые знатоки! Проблема с проверкой отделенной подписью. "Неправильное значение хеша" Есть два файла doc.pdf - файл документа sign.p7s - ЭЦП этого документа (PKCS#7). Подпись и документ - все валидны. (проверка прошла и через КриптоАРМ и через тестовую утилитку csptest.exe) Делаю проверку через VBS и CAPICOM (аналогично примеру из описания) Код:
Const CAPICOM_VERIFY_SIGNATURE_ONLY = 0
Dim oSignedData
Set oSignedData = CreateObject("CAPICOM.SignedData")
Dim Content : Content = LoadFile("c:\1\doc.pdf")
Dim Message : Message = LoadFile("c:\1\sign.p7s")
oSignedData.Content = Content
oSignedData.Verify Message, True, CAPICOM_VERIFY_SIGNATURE_ONLY
Function LoadFile (FileName)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(FileName) Then
Err.Raise vbObjectError+1, "LoadFile", "File not found"
End If
Dim ts
Set ts = fso.OpenTextFile(FileName, ForReading)
LoadFile = ts.ReadAll
End Function
Выдает ошибку "Неправильное значение кеша". Проверка через тестовую утилитку. Результат:"Detached Signature was verified OK" Код:
csptest.exe -sfsign -verify -in c:\1\doc.pdf -detached -signature c:\1\sign.p7s -base64
Проверка через VBS КриптоАРМ. Результат "Status: 1" (мол, все ОК. Через интерфейс АРМа проверка тоже проходит) Код:
const SIGN_ONLY = 1
Const DT_SIGNED_DATA = 2
Dim i
Dim oPKCS7Message
Dim oSignatures
Dim oSignature
Set oPKCS7Message = CreateObject( "DigtCrypto.PKCS7Message" )
oPKCS7Message.Load DT_SIGNED_DATA, "c:\1\sign.p7s", "c:\1\doc.pdf"
Set oSignatures = oPKCS7Message.Signatures
Dim n : n = oSignatures.Count
For i= 0 to n-1
Set oSignature = oSignatures.Item (i)
dim Status
Status = oSignature.Verify (SIGN_ONLY)
MsgBox "Status: " & CStr (Status)
next
Подозреваю, что проблема где-то при передаче oSignedData.Content = Content в нужной кодировке. пробовал CAPICOM.Utilities.Base64Encode(Content) и иные конвертации, то все не то - хеш не сходится Направьте на путь истинный, укажите, что не так, и как правильно. Заранее спасибо всем ответившим.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Здравствуйте.
>OpenTextFile
Читать нужно как бинарный файл. |
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
|
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 17.08.2016(UTC) Сообщений: 2
Сказал(а) «Спасибо»: 2 раз
|
Да, все оказалось проще :) Андрей, спасибо за ответ и за наводку! Код:
Content = LoadBinaryFile("c:\1\doc.pdf")
Function LoadBinaryFile(FileName)
Dim fStream
Set fStream = CreateObject ("ADODB.Stream")
fStream.Type = 1
fStream.Mode = 3
fStream.Open ()
fStream.LoadFromFile (FileName)
LoadBinaryFile = fStream.Read (-1)
End Function
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close