C# - Шифрование byte[] сертификатом

Источник
// Зашифровываем сообщение для каждого получателя,
        // используя соответствующие открытые ключи получателей.
        // Для зашифрования используем объект класса 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);
 
 
            // Расшифровываем сообщение.
            // Сообщение будет расшифровано для того получателя,
            // чей секретный ключ будет найден первым.
            // Для расшифрования сообщения на конкретного 
            // получателя можно использовать код подобный следующему:
            // envelopedCms.Decrypt(envelopedCms.RecipientInfos[0]);
            // который расшифровывает сообщение для первого 
            // получателя.
            Console.Write("Расшифрование ... ");
            envelopedCms.Decrypt();
            Console.WriteLine("Выполнено.");
 
            // После вызова метода Decrypt в свойстве ContentInfo 
            // содержится расшифрованное сообщение.
            return envelopedCms.ContentInfo.Content;
        }
Отправить комментарий

Популярные сообщения