c# - 如何在 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 格式)对其进行解密。可能的解决方案是什么?
解决方案
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
}
}
}
推荐阅读
- local-storage - 关于 BlazingPizza Blazor 应用程序使用的本地数据库的问题
- r - 了解 Markdown 和 Knitr 的基础知识
- c++ - 当用户这样说时停止 while / for 循环
- python-3.x - 数据流转换将相同的输入发送到输出
- javascript - 使用 MEAN Web App 链接社交媒体帐户
- oracle - 如何设置变量并在 Oracle PL/SQL 的选择查询中使用它?
- python - 如何解决 IPython Notebook 中大单元格中的双击问题?
- codeigniter - Ion_auth 控制器错误:无法加载请求的文件
- javascript - 当更新可用且设备离线时,如何在 PWA 中显示横幅?
- mongodb - nestjs mongoose 类型“字符串”不可分配给类型“条件”
>