Как расшифровать файл smime в приложении C #? - PullRequest
0 голосов
/ 17 июня 2019

У меня есть файл, который зашифрован с помощью этой команды:

openssl smime -encrypt -aes256 -in fileToencrypt -binary -outform DEM -out encryptedFile public_key

Его можно расшифровать с помощью команды:

openssl smime -decrypt -in encryptedFile -binary -inform DEM -inkey private-key.pem -out decryptedFile

Мне нужнорасшифровать его с помощью закрытого ключа (формат PEM) в моем приложении .NET Core.Какое может быть возможное решение?

1 Ответ

0 голосов
/ 17 июня 2019
using System;
using System.IO;
using System.Linq;
using System.Collections.Generic;

using Org.BouncyCastle.Cms;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.OpenSsl;
using Org.BouncyCastle.X509;
using Org.BouncyCastle.X509.Store;

namespace SMimeDecryptExample
{
    class Program
    {
        static void Main (string[] args)
        {
            AsymmetricKeyParameter key;

            using (var stream = File.OpenRead ("private-key.pem")) {
                using (var reader = new StreamReader (stream)) {
                    var pem = new PemReader (reader);

                    var keyObject = pem.ReadObject ();

                    if (keyObject is AsymmetricCipherKeyPair pair) {
                        key = pair.Private;
                    } else if (keyObject is AsymmetricKeyParameter) {
                        key = (AsymmetricKeyParameter) keyObject;
                    }
                }
            }

            var encryptedData = File.ReadAllBytes (args[0]);
            var parser = new CmsEnvelopedDataParser (encryptedData);
            var recipients = parser.GetRecipientInfos ();
            byte[] decryptedData;

            foreach (RecipientInformation recipient in recipients.GetRecipients ()) {
                decryptedData = recipient.GetContent (key);
                break;
            }

            // now you can do whatever you want with the decrypted data
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...