Статус: Участник
Группы: Участники
Зарегистрирован: 05.02.2010(UTC) Сообщений: 10 Откуда: Москва
|
Мне нужно подписывать файл архива *.rar, по сути бинарные данные. Подписываю с помощью CAPICOM SignedData.Sign (Signer, False, 1) SignedData.CoSign (Signer, 1)
Проблема в том что не могу извлечь исходные данные. Перед извлечением считываю файл с подписями и проверяю SignedData.Verify (Signature, False, 1) но SignedData.Content возвращает поврежденный архив.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,732 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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, по файл подписи пустой. И любые другие параметры преобразования дают пустой файл
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,732 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Цитата:Set ts = fso.OpenTextFile(FileName, ForReading) ничего не смущает? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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
Как же корректно прочитать данные для подписи?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,732 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Цитата:следующий код возвращает пустую переменную: у меня все нормально отрабатывает Цитата:но других примеров не видел Код:Open "TESTFILE" For Binary Access Write As #1
а вообще тема чтения бинарных файлов к встраиванию относится слабо, зато в гугле про нее много рассказано |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,732 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Скорее всего из скриптов IE такую конструкцию вызывать нельзя. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close