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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline KVI  
#1 Оставлено : 26 декабря 2011 г. 21:45:39(UTC)
KVI

Статус: Активный участник

Группы: Участники
Зарегистрирован: 17.09.2010(UTC)
Сообщений: 73
Мужчина
Откуда: АО ИНФИНИТУМ, Москва

Сказал «Спасибо»: 3 раз
Здравствуйте все.

При выполнении декодирования CMS-сообщения encodedEnvelopedCms длиной 142344192 байт
получаем Cryptographic Exception с мессаджем САБЖ

envelopedCms.Decode(encodedEnvelopedCms);

1) В чем может быть причина?
2) Исходное сообщение перед зашифровкой имело длину около 84 МБайт. Можно ли уменьшить размер зашифрованного CMS-сообщения?


Offline Андрей Писарев  
#2 Оставлено : 26 декабря 2011 г. 21:53:07(UTC)
Андрей *

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

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

Сказал «Спасибо»: 537 раз
Поблагодарили: 2176 раз в 1701 постах
KVI написал:
Здравствуйте все.

При выполнении декодирования CMS-сообщения encodedEnvelopedCms длиной 142344192 байт
получаем Cryptographic Exception с мессаджем САБЖ

envelopedCms.Decode(encodedEnvelopedCms);

1) В чем может быть причина?
2) Исходное сообщение перед зашифровкой имело длину около 84 МБайт. Можно ли уменьшить размер зашифрованного CMS-сообщения?





кодировка зашифрованного "сообщения" в итоге base64?
Техническую поддержку оказываем тут
Наша база знаний
Offline Максим Коллегин  
#3 Оставлено : 26 декабря 2011 г. 22:41:24(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 714 раз в 619 постах
Используйте "поточный" режим. В примерах есть.
Знания в базе знаний, поддержка в техподдержке
Offline KVI  
#4 Оставлено : 26 декабря 2011 г. 22:49:08(UTC)
KVI

Статус: Активный участник

Группы: Участники
Зарегистрирован: 17.09.2010(UTC)
Сообщений: 73
Мужчина
Откуда: АО ИНФИНИТУМ, Москва

Сказал «Спасибо»: 3 раз
Шифрование делается так:

1. envelopedCms.Encrypt()
2. envelopedCms.Encode()

Наверное, Encode() кодирует в Base64.
Offline KVI  
#5 Оставлено : 26 декабря 2011 г. 22:59:36(UTC)
KVI

Статус: Активный участник

Группы: Участники
Зарегистрирован: 17.09.2010(UTC)
Сообщений: 73
Мужчина
Откуда: АО ИНФИНИТУМ, Москва

Сказал «Спасибо»: 3 раз
maxdm написал:
Используйте "поточный" режим. В примерах есть.


Нам надо передать большой открытый файл, предварительно его зашифровав, с клиента на сервер и там некоторое время хранить в зашифрованом виде.
С потоковым режимом, как я понял, передаваемые куски файла шифруются и потом сразу расшифровываются.

Как можно по другому?
Offline Максим Коллегин  
#6 Оставлено : 26 декабря 2011 г. 23:44:02(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 714 раз в 619 постах
Неправильно поняли. Просто шифруется не одним куском, а частями.
http://cryptopro.ru/foru....aspx?g=posts&t=2079

Отредактировано пользователем 26 декабря 2011 г. 23:44:44(UTC)  | Причина: Не указана

Знания в базе знаний, поддержка в техподдержке
Offline KVI  
#7 Оставлено : 11 января 2012 г. 19:06:33(UTC)
KVI

Статус: Активный участник

Группы: Участники
Зарегистрирован: 17.09.2010(UTC)
Сообщений: 73
Мужчина
Откуда: АО ИНФИНИТУМ, Москва

Сказал «Спасибо»: 3 раз
Спасибо, получилось, наконец.

Пришлось повозиться с CryptoStream.FlushFinalBlock().

Вот, что получилось (ключ и синхропосылка для расшифровки передаются отдельно с помощью KeyExchange):

// Класс WCFStream. Прозрачное шифрование.

public override int Read(byte[] buffer, int offset, int bufferLen)
{
var bytesRead = _file.Read(buffer, offset, bufferLen);

if (_encryptor != null)
{
_fout.Position = 0;

if (bytesRead == 0)
{
if (!_encryptor.HasFlushedFinalBlock)
_encryptor.FlushFinalBlock();
}
else
_encryptor.Write(buffer, 0, bytesRead);

bytesRead = (int)_fout.Position;
_fout.Position = 0;
bytesRead = _fout.Read(buffer, 0, bytesRead);
}

_totalBytesRead += bytesRead;

if (Reading != null)
Reading(this, new ReadingEventArgs(bytesRead, _totalBytesRead, _length));

return bytesRead;
}
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.