powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Подпись файла средствами CAPICOM
13 сообщений из 13, страница 1 из 1
Подпись файла средствами CAPICOM
    #38883129
Доброго времени суток.
Сразу хочу извиниться за тему не в тот раздел и возможно описанную проблему ранее!
Проблема заключается в следующем. Необходимо подписать файл средствами Capicom и положить файл подписи отдельно.
Программку пишу на VisualFoxpro, но посмотрев на форумах - принцип один и тот же. Суть проблемы в следующем, при подписании файл подписи на 2 байта меньше и не проходит проверку, нежели если подписать КриптоАРМом. Если же шифровать файл и включать ЭЦП в него, то проверка проходит.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
oSIGNER=CREATEOBJECT('capicom.signer')
oSTORE=CREATEOBJECT('capicom.store')
oSTORE.open(2,'MY')
oCER=oSTORE.Certificates
oCER = oCER.select()
?oCER.item(1).getinfo(6) 
 
oSIGNER.Certificate = oCER.Item(1)

RELEASE oCER
RELEASE oSTORE

=DoSignCommand('d:\4\proba.txt', .f., oSIGNER)



FUNCTION DoSignCommand
LPARAMETERS FileNames, bDetached, Signer
SignedData = CREATEOBJECT('Capicom.SignedData')


utils=CREATEOBJECT('CAPICOM.Utilities')
InputString = Loadfile(FileNames) 
InputString = utils.BinaryStringToByteArray(InputString) 
SignedData.Content = inputString 

MES=SignedData.sign(Signer, bDetached, 0)
=Savefile(FileNames,MES)
=Savefile(FileNames+'_',STRCONV(MES,14))

RELEASE SignedData


FUNCTION LoadFile
LPARAMETERS Filename
FSO=CREATEOBJECT('Scripting.Filesystemobject')
TS=FSO.OpenTextFile(FileName,1)
result=TS.ReadAll
RELEASE FSO
RELEASE TS
RETURN result


FUNCTION SaveFile
LPARAMETERS Filename, Buffer
FSO=CREATEOBJECT('Scripting.Filesystemobject')
TS=FSO.OpenTextFile(FileName+'.sig',2,.t.)
TS.write(Buffer)
RELEASE FSO
RELEASE TS
RETURN .t.



Прошу прощения, если где-то выразился неправильно.
...
Рейтинг: 0 / 0
Подпись файла средствами CAPICOM
    #38883394
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел А Андреев,
единственное, что приходит в голову
Код: vbnet
1.
=Savefile(FileNames, utils.ByteArrayToBinaryString(MES))


ЗЫ: с VisualFoxpro не знаком
...
Рейтинг: 0 / 0
Подпись файла средствами CAPICOM
    #38884269
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел А Андреев...при подписании файл подписи на 2 байта меньше и не проходит проверку, нежели если подписать КриптоАРМомюю...
Сравнить файлы.

Подозреваю конец строки/перевод строки и/или другие спец. символы (типа 0x00).
...
Рейтинг: 0 / 0
Подпись файла средствами CAPICOM
    #38884628
Leonid KudryavtsevПодозреваю конец строки/перевод строки и/или другие спец. символы (типа 0x00).
Сравнивал. Смещение идет где-то вначале файла. Причем содержимое подписываемого файла - "1", т. е. размер файла 1 байт. Читал про проблемы CAPICOMa при подписывании файла нечетной длины, пробовал загонять в файл "11" - тоже самое.
"Ковыряясь" - я нашел, что проблема идет после
Код: plaintext
1.
Signature=Capicom.SignedData.Sign(Signer, True, 0)


Т.е. вот тут мне уже возвращается строка в кодировке Base64 на 4 байта меньше. Пробовал в
Код: plaintext
1.
Capicom.SignedData.Content


загонять данные разных типов - возвращается тоже самое.
...
Рейтинг: 0 / 0
Подпись файла средствами CAPICOM
    #38885872
sql2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел А Андреев,

OpenTextFile зачем используется?
...
Рейтинг: 0 / 0
Подпись файла средствами CAPICOM
    #38885873
sql2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел А Андреев,
для информации

если передавать бинарные данные на подпись - все должно работать
...
Рейтинг: 0 / 0
Подпись файла средствами CAPICOM
    #38886986
Всем огромное спасибо за наводку. Тему можно считать закрытой.
Переписал функцию LoadFile
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
FUNCTION LoadFile
LPARAMETERS FileName
CREATE CURSOR tmpfileout (fdata BLOB)
APPEND BLANK IN tmpfileout
APPEND MEMO fdata FROM (FileName)
cRESULT=tmpfileout.fdata
USE IN tmpfileout
RETURN cRESULT


На выходе получил получил переменную типа Blob? Подписал, сохранил подпись в файл, проверил подпись - все хорошо.
Код получился вот такой, но по другому не придумал, как прочитать файл. Если кто знает - подскажите как.
Всем спасибо.
...
Рейтинг: 0 / 0
Подпись файла средствами CAPICOM
    #38896881
Доброго времени суток.
Новая проблема при подписании файла средствами CAPICOM.
Подписывается файл размером 20 мб. При проверке - подпись неверна.
Какой вообще максимальный размер подписываемого файла. Или где какую настройку в CAPICOMе надо сделать.
Файл подписи получается 3,7 кб, а если же его подписывать КриптоАРМом, то файлик получается около 5 кб.
...
Рейтинг: 0 / 0
Подпись файла средствами CAPICOM
    #38897311
sql2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел А Андреев,

успешно подписывал\шифровал 370 Мб.
Дальше - упирается в память.
Нужно использовать вызовы поточных функций cryptoapi.

Разница в размерах файла:
1) КриптоАРМ по умолчанию кодирует еще в base64
2) Цепочка сертификации разная (сертификат подписанта, цепочка до корневого, включая корневой)
...
Рейтинг: 0 / 0
Подпись файла средствами CAPICOM
    #38897333
sql2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел А Андреев
Подписывается файл размером 20 мб. При проверке - подпись неверна.

Прямо так и говорит? (с)

Или "что-то там про ASN.1" ?
...
Рейтинг: 0 / 0
Подпись файла средствами CAPICOM
    #38897986
sql2012Павел А Андреев
Подписывается файл размером 20 мб. При проверке - подпись неверна.

Прямо так и говорит? (с)

Или "что-то там про ASN.1" ?

Проверку делал КриптоАРМом...
...
Рейтинг: 0 / 0
Подпись файла средствами CAPICOM
    #38898612
sql2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел А Андреевsql2012пропущено...


Прямо так и говорит? (с)

Или "что-то там про ASN.1" ?

Проверку делал КриптоАРМом...

И .... ?
Без кода ошибки\текста?
...
Рейтинг: 0 / 0
Подпись файла средствами CAPICOM
    #38900677
Проблема была в следующем.
Как я писал выше - программу пишу на Visual Foxpro. И тут грабли - как оказалось максимальный размер строковой переменной в памяти (Maximum # of characters per character string or memory variable.) составляет 16,777,184, а мне необходимо загнать туда не менее 50 мБ.
В PHP и MySQL в конфигах можно играться с этой цифрой. В Visual Foxpro как оказалось нет.
Поэтому обошел этот момент по другому

SignedData.Content = CREATEBINARY(FILETOSTR(сFileName))

Спасибо за советы. Тему можно считать закрытой.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Подпись файла средствами CAPICOM
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]