首页 > 解决方案 > 如何在 C# 应用程序中解密 smime 文件?

问题描述

我有一个文件,使用以下命令加密:

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

我需要在我的 .NET Core 应用程序中使用私钥(PEM 格式)对其进行解密。可能的解决方案是什么?

标签: c#encryptionbouncycastlemimekit

解决方案


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
        }
    }
}

推荐阅读