Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Подпись файла средствами CAPICOM / 13 сообщений из 13, страница 1 из 1
18.02.2015, 16:51
    #38883129
Подпись файла средствами CAPICOM
Доброго времени суток.
Сразу хочу извиниться за тему не в тот раздел и возможно описанную проблему ранее!
Проблема заключается в следующем. Необходимо подписать файл средствами 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
18.02.2015, 22:59
    #38883394
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подпись файла средствами CAPICOM
Павел А Андреев,
единственное, что приходит в голову
Код: vbnet
1.
=Savefile(FileNames, utils.ByteArrayToBinaryString(MES))


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

Подозреваю конец строки/перевод строки и/или другие спец. символы (типа 0x00).
...
Рейтинг: 0 / 0
20.02.2015, 08:26
    #38884628
Подпись файла средствами CAPICOM
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
22.02.2015, 09:56
    #38885872
sql2012
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подпись файла средствами CAPICOM
Павел А Андреев,

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

если передавать бинарные данные на подпись - все должно работать
...
Рейтинг: 0 / 0
24.02.2015, 12:01
    #38886986
Подпись файла средствами CAPICOM
Всем огромное спасибо за наводку. Тему можно считать закрытой.
Переписал функцию 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
06.03.2015, 10:09
    #38896881
Подпись файла средствами CAPICOM
Доброго времени суток.
Новая проблема при подписании файла средствами CAPICOM.
Подписывается файл размером 20 мб. При проверке - подпись неверна.
Какой вообще максимальный размер подписываемого файла. Или где какую настройку в CAPICOMе надо сделать.
Файл подписи получается 3,7 кб, а если же его подписывать КриптоАРМом, то файлик получается около 5 кб.
...
Рейтинг: 0 / 0
06.03.2015, 15:06
    #38897311
sql2012
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подпись файла средствами CAPICOM
Павел А Андреев,

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

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

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

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

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

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

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


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

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

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

И .... ?
Без кода ошибки\текста?
...
Рейтинг: 0 / 0
11.03.2015, 08:33
    #38900677
Подпись файла средствами CAPICOM
Проблема была в следующем.
Как я писал выше - программу пишу на 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
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Подпись файла средствами CAPICOM / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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