Спасибо, но не совсем очевидна аналогия.
Если посмотреть то в моем сообщении с 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 г. 22:04:39(UTC)
| Причина: Не указана