Ключевое слово в защите информации
ключевое слово
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход. Новые регистрации запрещены.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline DmitryN  
#1 Оставлено : 17 августа 2016 г. 12:02:29(UTC)
DmitryN

Статус: Новичок

Группы: Участники
Зарегистрирован: 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) и иные конвертации, то все не то - хеш не сходится
Направьте на путь истинный, укажите, что не так, и как правильно.

Заранее спасибо всем ответившим.
Offline Андрей Писарев  
#2 Оставлено : 17 августа 2016 г. 12:34:42(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,190
Мужчина
Российская Федерация

Сказал «Спасибо»: 621 раз
Поблагодарили: 2397 раз в 1886 постах
Здравствуйте.

>OpenTextFile

Читать нужно как бинарный файл.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
DmitryN оставлено 17.08.2016(UTC)
Offline Андрей Писарев  
#3 Оставлено : 17 августа 2016 г. 12:43:02(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,190
Мужчина
Российская Федерация

Сказал «Спасибо»: 621 раз
Поблагодарили: 2397 раз в 1886 постах
Пример чтения через "ADODB.Stream"
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
DmitryN оставлено 17.08.2016(UTC)
Offline DmitryN  
#4 Оставлено : 17 августа 2016 г. 13:10:51(UTC)
DmitryN

Статус: Новичок

Группы: Участники
Зарегистрирован: 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

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.