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

Уведомление

Icon
Error

4 Страницы«<234
Опции
К последнему сообщению К первому непрочитанному
Offline Андрей Писарев  
#31 Оставлено : 25 сентября 2012 г. 0:48:15(UTC)
Андрей *

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

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

Сказал «Спасибо»: 621 раз
Поблагодарили: 2397 раз в 1886 постах
VitalyMM написал:
Еще раз добавил файл (кнопкой attach), но он опять недоступен... что я делаю не так??


попробуй "простое" имя файла... типа 1.enc
хотя нет... не в имени дело... "R1_1655046738_032_24092012_ED73599D-F9F0-4E73-835F"

Отредактировано пользователем 25 сентября 2012 г. 0:50:49(UTC)  | Причина: Не указана

Вложение(я):
R1_1655046738_032_24092012_ED73599D-F9F0-4E73-835F (2kb) загружен 5 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Техническую поддержку оказываем тут
Наша база знаний
Offline VitalyMM  
#32 Оставлено : 25 сентября 2012 г. 3:52:30(UTC)
VitalyMM

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

Группы: Участники
Зарегистрирован: 16.09.2012(UTC)
Сообщений: 25

Я добился, чтобы у меня RAD Studio XE2 начал шифровать файлы без ошибок во время шифрования, но тут же обнаружил странный эффект. В результирующий файл в конец пишется какая-то лабуда размером примерно 713 байт.. Если ее удалить, то файл начинает нормально дешифроваться без всяких проблем. Видимо функция CryptEncryptMessage( @EncParams, CertCount, Pointer(MessageCert), FileStream.Memory, FileStream.Size, nil, cbEncrypted ) ошибается с размером выходного потока?? Так что-ли?? Проверил многократно - удаляю хвост в конце файла и он становится читабельным.... Think На вход этой функции подается 2 сертификата и входной файл, размер которого правильный, я проверял.. В чем засада-то??????
Offline Андрей Писарев  
#33 Оставлено : 25 сентября 2012 г. 4:01:25(UTC)
Андрей *

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

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

Сказал «Спасибо»: 621 раз
Поблагодарили: 2397 раз в 1886 постах
VitalyMM написал:
Я добился, чтобы у меня RAD Studio XE2 начал шифровать файлы без ошибок во время шифрования, но тут же обнаружил странный эффект. В результирующий файл в конец пишется какая-то лабуда размером примерно 713 байт.. Если ее удалить, то файл начинает нормально дешифроваться без всяких проблем. Видимо функция CryptEncryptMessage( @EncParams, CertCount, Pointer(MessageCert), FileStream.Memory, FileStream.Size, nil, cbEncrypted ) ошибается с размером выходного потока?? Так что-ли?? Проверил многократно - удаляю хвост в конце файла и он становится читабельным.... Think На вход этой функции подается 2 сертификата и входной файл, размер которого правильный, я проверял.. В чем засада-то??????



т.е. если выполнить шифрование на 2х сертификатах в КриптоАРМ-е размер будет меньше на указанный размер (приблизительно)?

зашифруй файл на мой сертификат (пост от 24 сентября 2012 г. 16:07:46) и свой, прикрепи здесь (или ссылку на внешний ресурс, тип http://rghost.ru)
тогда и будем делать выводы ...

или если так интересно - бери в руки ASN1-редактор и вперед - посмотришь заодно, что ты удалял из pkcs7 данных

Отредактировано пользователем 25 сентября 2012 г. 4:03:52(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline VitalyMM  
#34 Оставлено : 25 сентября 2012 г. 4:50:51(UTC)
VitalyMM

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

Группы: Участники
Зарегистрирован: 16.09.2012(UTC)
Сообщений: 25

Я разобрался!:d/ Все оказалось проще. При первом вызове CryptEncryptMessage для вычисления длины выходного сообщения функция возвращает приблизительное значение, но заведомо большее, чем реально может понадобиться для принятия закодированного сообщения. Поэтому в файл надо писать столько байт, сколько вернет второй вызов этой функции... А практически во всех примерах, которые я нашел на этом форуме, пишется столько, сколько дает первый вызов... Чуть зубы не позеленели от напряга, пока я соображал, что за хвост лепится в конец нормального файла.. d'oh! Андрей, огромное спасибо за внимание и желание помочь!
Offline Андрей Писарев  
#35 Оставлено : 25 сентября 2012 г. 4:57:57(UTC)
Андрей *

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

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

Сказал «Спасибо»: 621 раз
Поблагодарили: 2397 раз в 1886 постах
VitalyMM написал:
Я разобрался!:d/ Все оказалось проще. При первом вызове CryptEncryptMessage для вычисления длины выходного сообщения функция возвращает приблизительное значение, но заведомо большее, чем реально может понадобиться для принятия закодированного сообщения. Поэтому в файл надо писать столько байт, сколько вернет второй вызов этой функции... А практически во всех примерах, которые я нашел на этом форуме, пишется столько, сколько дает первый вызов... Чуть зубы не позеленели от напряга, пока я соображал, что за хвост лепится в конец нормального файла.. d'oh! Андрей, огромное спасибо за внимание и желание помочь!


Доверяй, но проверяй...
use SDK Anxious

Отредактировано пользователем 25 сентября 2012 г. 5:03:48(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#36 Оставлено : 25 сентября 2012 г. 5:01:23(UTC)
Андрей *

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

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

Сказал «Спасибо»: 621 раз
Поблагодарили: 2397 раз в 1886 постах
смотри SDK (особенно в следующий раз) - там правильно
CryptEncryptMessage ( ... cbEncryptedBlob.. )
Резервируем память( ... cbEncryptedBlob.. ) (!)
CryptEncryptMessage( ... cbEncryptedBlob.. ) (реальный размер)
write_file (out_filename, cbEncryptedBlob, pbEncryptedBlob);


еще бы решить проблему по первому вопросу в этой ветке

Отредактировано пользователем 25 сентября 2012 г. 5:07:12(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline VitalyMM  
#37 Оставлено : 25 сентября 2012 г. 13:06:51(UTC)
VitalyMM

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

Группы: Участники
Зарегистрирован: 16.09.2012(UTC)
Сообщений: 25

Да, спасибо еще раз. С первым вопросом наверное посложнее будет. КриптоАРМ наверно тоже работает через CryptoAPI? Может среди этих 400 сертификатов есть какой-то кривой и КриптоАРМ это понимает и пропускает его, не пытаясь использовать?
Offline Андрей Писарев  
#38 Оставлено : 25 сентября 2012 г. 13:09:29(UTC)
Андрей *

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

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

Сказал «Спасибо»: 621 раз
Поблагодарили: 2397 раз в 1886 постах
VitalyMM написал:
Да, спасибо еще раз. С первым вопросом наверное посложнее будет. КриптоАРМ наверно тоже работает через CryptoAPI? Может среди этих 400 сертификатов есть какой-то кривой и КриптоАРМ это понимает и пропускает его, не пытаясь использовать?



КриптоАРМ - использует низкоуровневые функции...
Сомневаюсь, что "понимает и пропускает..."...
а насчет "кривого" - было первое предположение, что там RSA-шный присутствует (в интервале 200-400)... но была бы другая ошибка...

Отредактировано пользователем 25 сентября 2012 г. 13:16:55(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline IvannikovAV  
#39 Оставлено : 26 сентября 2012 г. 13:47:37(UTC)
IvannikovAV

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

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

Докладываю :о)
Вчера прочитал про "неправильные" сертификаты и осенило :о)
С утра переписал кусок добавления сертификатов в массив с проверкой на срок действия и дело пошло. 358 сертификатов из 400 оказались валидными и добавились в массив. Соответственно первый вызов вернул значение буфера больше нуля. Дальше радостно выделился массив под данные, второй вызов и бац!, у вас имеются дополнительные данные :о) Первый вызов вернул на 656 байт меньше, чем требовалось. Соответственно, не все зашифрованные данные поместились в выделенный буфер и получили ошибку ERROR_MORE_DATA.

Решил попробовать второй вызов изменить и поправить массив для данных в случае, если он оказался меньше, чем надо...

if cbEncrypted > 0 then
begin
Stream := TMemoryStream.Create;
try
Stream.SetSize( cbEncrypted );
if not CryptEncryptMessage( @EncParams, CertCount, RecipientCertArray.Memory, FileStream.Memory, FileStream.Size, Stream.Memory, @cbEncrypted ) then
begin
if GetLastError = ERROR_MORE_DATA then
begin
Stream.SetSize( cbEncrypted );
CryptEncryptMessage( @EncParams, CertCount, RecipientCertArray.Memory, FileStream.Memory, FileStream.Size, Stream.Memory, @cbEncrypted )
end;
end;
Stream.SetSize( cbEncrypted );
Stream.Position := 0;
Stream.SaveToFile( CryptFileName );
finally
Stream.Free;
end;

Итог - расшифровывается без вопросов.

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