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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Woody  
#1 Оставлено : 5 мая 2010 г. 21:10:49(UTC)
Woody

Статус: Участник

Группы: Участники
Зарегистрирован: 05.02.2010(UTC)
Сообщений: 10
Откуда: Москва

Мне нужно подписывать файл архива *.rar, по сути бинарные данные. Подписываю с помощью CAPICOM
SignedData.Sign (Signer, False, 1)
SignedData.CoSign (Signer, 1)

Проблема в том что не могу извлечь исходные данные. Перед извлечением считываю файл с подписями и проверяю
SignedData.Verify (Signature, False, 1)
но SignedData.Content возвращает поврежденный архив.
Offline Kirill Sobolev  
#2 Оставлено : 6 мая 2010 г. 14:05:36(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,732
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Проблема либо в передаче исходных данных, либо в извлечении подписанных.
http://www.cryptopro.ru/.../products/csp/faq.htm#11
Техническую поддержку оказываем тут
Наша база знаний
Offline Woody  
#3 Оставлено : 6 мая 2010 г. 21:30:28(UTC)
Woody

Статус: Участник

Группы: Участники
Зарегистрирован: 05.02.2010(UTC)
Сообщений: 10
Откуда: Москва

Функция извлечения данных:
Код:

Sub LoadFile (FileName, Buffer)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(FileName) Then
	MsgBox("File" & FileName & "not find")
	Exit Sub
End If
Dim ts
Set ts = fso.OpenTextFile(FileName, ForReading) 
Dim sText
sText = ts.ReadAll
'Buffer = Strings.StrConv(sText, VbStrConv.FromUnicode)
Buffer = sText
End Sub


Запрашиваем данные и подписываем
Код:

LoadFile FileNameSource, Content
SignedData.Content = Content
Signature = SignedData.Sign (Signer, False)


Если в функции активировать Buffer = Strings.StrConv(sText, VbStrConv.FromUnicode)
вместо Buffer = sText, по файл подписи пустой. И любые другие параметры преобразования дают пустой файл
Offline Kirill Sobolev  
#4 Оставлено : 6 мая 2010 г. 21:32:07(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,732
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Цитата:
бинарные данные

Цитата:
Set ts = fso.OpenTextFile(FileName, ForReading)

ничего не смущает?
Техническую поддержку оказываем тут
Наша база знаний
Offline Woody  
#5 Оставлено : 7 мая 2010 г. 21:34:26(UTC)
Woody

Статус: Участник

Группы: Участники
Зарегистрирован: 05.02.2010(UTC)
Сообщений: 10
Откуда: Москва

Смущает, но других примеров не видел. Есть еще объект ADODB.Stream, но следующий код возвращает пустую переменную:

Код:

Sub LoadFile (FileName, Buffer)
Dim ADOStream
Set ADOStream = CreateObject("ADODB.Stream")

ADOStream.Type = 1
ADOStream.Open
ADOStream.LoadFromFile(FileName)

Buffer = ADOStream.Read()
ADOStream.Close()
Set ADOStream = Nothing
End Sub


Как же корректно прочитать данные для подписи?
Offline Kirill Sobolev  
#6 Оставлено : 7 мая 2010 г. 23:41:22(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,732
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Цитата:
следующий код возвращает пустую переменную:

у меня все нормально отрабатывает
Цитата:
но других примеров не видел

Код:
Open "TESTFILE" For Binary Access Write As #1

а вообще тема чтения бинарных файлов к встраиванию относится слабо, зато в гугле про нее много рассказано
Техническую поддержку оказываем тут
Наша база знаний
Offline Woody  
#7 Оставлено : 10 мая 2010 г. 17:15:10(UTC)
Woody

Статус: Участник

Группы: Участники
Зарегистрирован: 05.02.2010(UTC)
Сообщений: 10
Откуда: Москва

Конструкция ADODB.Stream будет работать если параметр реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\{00000566-0000-0010-8000-00AA006D2EA4}\Compatibility Flags установить в значение 0. По умолчанию на моей WinXP SP3 стояло значение 400 в 16-ричном виде, которое не дает IE создавать объекты ADODB.Stream. В общем пример заработал, но сколько продлится поддержка не понятно (блокировка была введена в 2004 году).

Цитата:
Open "TESTFILE" For Binary Access Write As #1


Нашел в сети много примеров с этой конструкцией, в том числе функцию преобразования в строку и обратно. Пригодится для пересылки данных в поле формы. Но IE ругается, пишет "Ошибка на странице". Не знаете с чем это может быть связано? Код такой:

Код:

Dim TheBytes()
Open FileName For Binary Access To Read As #1
Get #1, , TheBytes()
Close #1
Offline Kirill Sobolev  
#8 Оставлено : 11 мая 2010 г. 14:45:45(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,732
Мужчина
Откуда: КРИПТО-ПРО

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