logo
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline lnk  
#1 Оставлено : 16 мая 2013 г. 17:32:29(UTC)
lnk

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

Группы: Участники
Зарегистрирован: 16.05.2013(UTC)
Сообщений: 3
Российская Федерация

Сейчас файл data шифруется и расшивровывается следующим образом

Расшифровка
cryptcp -decr -f "e:\cps\in.cer" -nochain data.p7s.p7m data.p7s
cryptcp -verify -f "e:\csp\out.cer" -nochain data.p7s data.txt

Шифрование
cryptcp -sign -f "e:\cps\in.cer" -nochain data.txt data.p7s
cryptcp -encr -f "e:\cps\out.cer" -nochain data.p7s data.p7s.p7m

in.cer и out.cer - сертификаты с алгоритмом гост


Как аналогичное сделать на CryptoPro.NET ?
byte[] Decrypt( byte[] crypted )
byte[] Encrypt( byte[] data )

Еще вопрос - нужно ли создавать контейнеры ключей в реестре ? При попытке решить данную задачу через Gost3410CryptoProvider требовалось имя контейнера,
но если посмотреть на пример с cryptcp , то имя контейнера не указано, соотвественно возможно оно излишне ?

Отредактировано пользователем 16 мая 2013 г. 17:33:54(UTC)  | Причина: Не указана

Offline Максим Коллегин  
#2 Оставлено : 17 мая 2013 г. 4:28:56(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 11 раз
Поблагодарили: 484 раз в 440 постах
Смотрите пример EnvelopedMultipleRecipients в SDK.
Знания в базе знаний, поддержка в техподдержке
Offline lnk  
#3 Оставлено : 17 мая 2013 г. 19:00:48(UTC)
lnk

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

Группы: Участники
Зарегистрирован: 16.05.2013(UTC)
Сообщений: 3
Российская Федерация

Спасибо, но не совсем очевидна аналогия.

Если посмотреть то в моем сообщении с cryptcp используется 2 сертификата при шифровании/дешифровании

В SDK имеются следюущие функции

static byte[] EncryptMsg(
Byte[] msg,
X509Certificate2Collection recipientCerts)

static Byte[] DecryptMsg(byte[] encodedEnvelopedCms)

В первой передается только recipientCerts, В последней вообще сертификаты никак не передаются, т.е. при Decrypt они разве не нужны ?
Или они как-то не явно передаются ?

Также не понятно причем тут MultipleRecipients , в моем случае один отправитель и один получатель, то есть мне не нужно при Encrypt делать шифрование для нескольких получателей , у меня он один.



// Зашифровываем сообщение для каждого получателя,
// используя соответствующие открытые ключи получателей.
// Для зашифрования используем объект класса EnvelopedCms.
static byte[] EncryptMsg(
Byte[] msg,
X509Certificate2Collection recipientCerts)
{
// Помещаем сообщение в объект ContentInfo
// Это требуется для создания объекта EnvelopedCms.
ContentInfo contentInfo = new ContentInfo(msg);

// Создаем объект EnvelopedCms, передавая ему
// только что созданный объект ContentInfo.
// Используем идентификацию получателя (SubjectIdentifierType)
// по умолчанию (IssuerAndSerialNumber).
// Не устанавливаем алгоритм зашифрования тела сообщения:
// ContentEncryptionAlgorithm устанавливается в
// RSA_DES_EDE3_CBC, несмотря на это, при зашифровании
// сообщения в адрес получателя с ГОСТ сертификатом,
// будет использован алгоритм GOST 28147-89.
EnvelopedCms envelopedCms = new EnvelopedCms(contentInfo);

// Создаем объект CmsRecipientCollection, который
// идентифицирует получателей зашифрованного сообщения.
CmsRecipientCollection recips =
new CmsRecipientCollection(
SubjectIdentifierType.IssuerAndSerialNumber,
recipientCerts);

Console.WriteLine(
"{0}Зашифровываем данные для нескольких получателей " +
"с именами:", Environment.NewLine );
foreach (CmsRecipient recip in recips)
{
Console.WriteLine("\t" +
recip.Certificate.SubjectName.Name);
}

// Зашифровываем сообщение на коллекцию получателей.
envelopedCms.Encrypt(recips);
Console.WriteLine("Выполнено.");

// Закодированное EnvelopedCms сообщение содержит
// зашифрованный текст сообщения и информацию
// о каждом получателе данного сообщения.
return envelopedCms.Encode();
}

// Расшифрование закодированного EnvelopedCms сообщения
// для одного из получателей.
static Byte[] DecryptMsg(byte[] encodedEnvelopedCms)
{
// Создаем объект для декодирования и расшифрования.
EnvelopedCms envelopedCms = new EnvelopedCms();

// Декодируем сообщение.
envelopedCms.Decode(encodedEnvelopedCms);

// Выводим количество получателей сообщения и
// алгоритм зашифрования.
DisplayEnvelopedCms(envelopedCms, false);

// Расшифровываем сообщение.
// Сообщение будет расшифровано для того получателя,
// чей секретный ключ будет найден первым.
// Для расшифрования сообщения на конкретного
// получателя можно использовать код подобный следующему:
// envelopedCms.Decrypt(envelopedCms.RecipientInfos[0]);
// который расшифровывает сообщение для первого
// получателя.
Console.Write("Расшифрование ... ");
envelopedCms.Decrypt();
Console.WriteLine("Выполнено.");

// После вызова метода Decrypt в свойстве ContentInfo
// содержится расшифрованное сообщение.
return envelopedCms.ContentInfo.Content;
}

Отредактировано пользователем 17 мая 2013 г. 19:04:39(UTC)  | Причина: Не указана

Offline Андрей Писарев  
#4 Оставлено : 17 мая 2013 г. 20:12:01(UTC)
Андрей Писарев

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

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

Сказал «Спасибо»: 264 раз
Поблагодарили: 1042 раз в 835 постах
Автор: lnk Перейти к цитате
Спасибо, но не совсем очевидна аналогия.
Если посмотреть то в моем сообщении с cryptcp используется 2 сертификата при шифровании/дешифровании

это и есть MultipleRecipients

При шифровании нет понятия "мой\другой сертификат". Есть сертификаты получателей зашифрованных данных.


Автор: lnk Перейти к цитате

В SDK имеются следюущие функции

static byte[] EncryptMsg(
Byte[] msg,
X509Certificate2Collection recipientCerts)

В первой передается только recipientCerts,

А что еще нужно-то?
X509Certificate2Collection заполнили сертификатами (отправитель\получатель)?



Автор: lnk Перейти к цитате

В последней вообще сертификаты никак не передаются, т.е. при Decrypt они разве не нужны ?
Или они как-то не явно передаются ?

Формат PKCS#7
Содержится информация о сертификатах (УЦ\Серийный номер сертификата пользователя), "на которые было зашифровано", для поиска их в хранилище при расшифровке (чтобы получить ссылку на закрытый ключ и расшифровать).


Автор: lnk Перейти к цитате

Также не понятно причем тут MultipleRecipients , в моем случае один отправитель и один получатель, то есть мне не нужно при Encrypt делать шифрование для нескольких получателей , у меня он один.

В вашем случае = 2 получателя зашифрованных данных.

Тогда шифруйте только на одного (на сертификат получателя),
но не сможете потом расшифровать с помощью сертификата отправителя (свой).


Offline lnk  
#5 Оставлено : 18 мая 2013 г. 8:12:26(UTC)
lnk

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

Группы: Участники
Зарегистрирован: 16.05.2013(UTC)
Сообщений: 3
Российская Федерация

Цитата:

Цитата:

Автор: lnk

В SDK имеются следюущие функции

static byte[] EncryptMsg(
Byte[] msg,
X509Certificate2Collection recipientCerts)

В первой передается только recipientCerts,


А что еще нужно-то?
X509Certificate2Collection заполнили сертификатами (отправитель\получатель)?


Как минимум порядок сертификатов в котором их добавлять в коллекцию, при использовании cryptcp один сертификат используется для операции -encr, второй -sign. Я так понимаю in.cer используется для подписи, а out.cer для шифрованния файла.
В MultipleRecipients операции sign подписи не видно ( возможно этого там и нет ).



Цитата:

Цитата:

В последней вообще сертификаты никак не передаются, т.е. при Decrypt они разве не нужны ?
Или они как-то не явно передаются ?


Формат PKCS#7
Содержится информация о сертификатах (УЦ\Серийный номер сертификата пользователя), "на которые было зашифровано", для поиска их в хранилище при расшифровке (чтобы получить ссылку на закрытый ключ и расшифровать).




Ок. А в cryptcp для чего передается сертификат , или он игнорируется ?
Также я так понимаю файл data.p7s - это файл с подписью, а после операции verify он сохраняется в файл data.txt который уже без подписи.
В MulitpleRecipients я не уверен что подпись также "удаляется" при проверке ( если эта проверка там есть )





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