Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,113   Сказал «Спасибо»: 615 раз Поблагодарили: 2381 раз в 1873 постах
|
|
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 15.05.2015(UTC) Сообщений: 40  Откуда: Москва Сказал(а) «Спасибо»: 2 раз
|
Вы хотели сказать это: "Нужно использовать более низкоуровневое api (cryptmsgopentodecode) или открыть нужный контейнер предварительно и задать пин." ?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,113   Сказал «Спасибо»: 615 раз Поблагодарили: 2381 раз в 1873 постах
|
Автор: bony599  Вы хотели сказать это: "Нужно использовать более низкоуровневое api (cryptmsgopentodecode) или открыть нужный контейнер предварительно и задать пин." ? Да. |
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 15.05.2015(UTC) Сообщений: 40  Откуда: Москва Сказал(а) «Спасибо»: 2 раз
|
Для тех, кто дочитал эту пусто-порожнюю переписку до этого места сообщаю, что мне чудом удалось написать удачный код, который должен был быть вторым и последним сообщением по этой теме:
CspParameters cspParameters = new CspParameters(75); cspParameters.Flags = CspProviderFlags.NoPrompt; string pin = "123456"; SecureString spin = new SecureString(); foreach (char c in pin.ToCharArray()) { spin.AppendChar(c); } cspParameters.KeyPassword = spin; cspParameters.KeyContainerName = CertificateCN;
Gost3410CryptoServiceProvider csp = new Gost3410CryptoServiceProvider(cspParameters); // Создаем объект для декодирования и расшифрования. EnvelopedCms envelopedCms = new EnvelopedCms();
// Декодируем сообщение. envelopedCms.Decode(File.ReadAllBytes(fname + ".p7m"));
// Расшифровываем сообщение. // Сообщение будет расшифровано для того получателя, // чей секретный ключ будет найден первым. // Для расшифрования сообщения на конкретного // получателя можно использовать код подобный следующему: // envelopedCms.Decrypt(envelopedCms.RecipientInfos[0]); // который расшифровывает сообщение для первого // получателя. Console.Write("Сертификатов: {0}. Расшифрование ... ", envelopedCms.Certificates.Count);
envelopedCms.Certificates.Clear(); envelopedCms.Certificates.Add(csp.ContainerCertificate);
envelopedCms.Decrypt(envelopedCms.Certificates);
Вроде бы проблема решилась. И большой респект экспертам!
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 15.05.2015(UTC) Сообщений: 40  Откуда: Москва Сказал(а) «Спасибо»: 2 раз
|
Для тех, кто дочитал эту пусто-порожнюю переписку до этого места сообщаю, что мне чудом удалось написать удачный код, который должен был быть вторым и последним сообщением по этой теме:
CspParameters cspParameters = new CspParameters(75); cspParameters.Flags = CspProviderFlags.NoPrompt; string pin = "123456"; SecureString spin = new SecureString(); foreach (char c in pin.ToCharArray()) { spin.AppendChar(c); } cspParameters.KeyPassword = spin; cspParameters.KeyContainerName = CertificateCN;
Gost3410CryptoServiceProvider csp = new Gost3410CryptoServiceProvider(cspParameters);
// Создаем объект для декодирования и расшифрования. EnvelopedCms envelopedCms = new EnvelopedCms();
// Декодируем сообщение. envelopedCms.Decode(File.ReadAllBytes(fname + ".p7m"));
// Расшифровываем сообщение. // Сообщение будет расшифровано для того получателя, // чей секретный ключ будет найден первым. // Для расшифрования сообщения на конкретного // получателя можно использовать код подобный следующему: // envelopedCms.Decrypt(envelopedCms.RecipientInfos[0]); // который расшифровывает сообщение для первого // получателя. Console.Write("Сертификатов: {0}. Расшифрование ... ", envelopedCms.Certificates.Count);
envelopedCms.Certificates.Clear(); envelopedCms.Certificates.Add(csp.ContainerCertificate);
envelopedCms.Decrypt(envelopedCms.Certificates);
Вроде бы проблема решилась. И большой респект экспертам!
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,433  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 38 раз Поблагодарили: 737 раз в 634 постах
|
Поздравляю! Когда писал ответ номер №2 под рукой был только телефон. Примерно такой же код находится в примере Sign.cs в Simple35.Pdf. В контейнере может не быть сертификата - посмотрите пример. |
|
 1 пользователь поблагодарил Максим Коллегин за этот пост.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 15.05.2015(UTC) Сообщений: 40  Откуда: Москва Сказал(а) «Спасибо»: 2 раз
|
Слушайте, ну вы странные люди! С подписью у меня как раз проблем и не было потому, что были примеры. С шифрованием, как Вы писали, "аналогично" сделать нельзя, т.к. экземпляр CmsSigner создается из CspParameters, дериват класса которого и поставляется КриптоПро .Net, в котором как и реализован программный ввод нашего "советского" ПИН-кода. В классе EnvelopedCms прилепить классы КриптоПро .Net ну просто некуда, поэтому и х.з. как сделать программный ввод ПИН-кода. Причем то, что я написал, действительно случайная удача, т.к. когда я сразу попробовал написать так: Gost3410CryptoServiceProvider csp = new Gost3410CryptoServiceProvider(cspParameters); X509Certificate2Collection recipientCerts = new X509Certificate2Collection(csp.ContainerCertificate); csp.PreloadContainer(); //эта хрень ничего не дает csp.SetContainerPassword(spin); //эта тоже // Создаем объект для декодирования и расшифрования. EnvelopedCms envelopedCms = new EnvelopedCms();
// Декодируем сообщение. envelopedCms.Decode(File.ReadAllBytes(fname + ".p7m"));
// Выводим количество получателей сообщения и // алгоритм зашифрования. DisplayEnvelopedCms(envelopedCms, false);
// Расшифровываем сообщение. envelopedCms.Decrypt(recipientCerts); Так не работает! А вот через коллекцию Certificates класса EnvelopedCms работает. У меня сертификат в контейнере вместе с ключом, мне не нужно его искать в другом месте. Поэтому, братья по разуму, если вас какой-то бедолага спрашивает "как?", то нужно в ответ "скопипейстить" код или линк на него, если конечно знаете решение, а не заниматься отсылками на три буквы ("SDK").
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,433  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 38 раз Поблагодарили: 737 раз в 634 постах
|
Какой-то неконструктивный диалог. Если формат форума не устраивает - в следующий раз покупайте техподдержку разработчика. Тему закрываю. Важная информацияОтредактировано пользователем 20 мая 2015 г. 11:48:14(UTC)
| Причина: Не указана |
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close