【问题标题】:Decrypting PKCS#7 encrypted data in C#在 C# 中解密 PKCS#7 加密数据
【发布时间】:2010-12-03 00:04:35
【问题描述】:

我正在研究一种需要解密 PKCS#7 加密数据的解决方案,最好是在 C# 中。据我所知,.NET api 通过 System.Security.Cryptography.Pkcs 命名空间对此提供了支持。但是,该实现似乎只能在字节数组上工作。那么当我有一个大的加密文件不适合内存时我该怎么办?

我在这里遗漏了什么,还是有另一种方法可以在流级别上执行此操作而不是使用字节数组?

【问题讨论】:

    标签: c# .net encryption cryptography


    【解决方案1】:

    .NET 框架仅对 PKCS#7/CMS 提供基本支持,因此不支持流式传输数据。

    您需要一个 3rd 方库。正如其他人所提到的,BouncyCastle 是一个绝佳的选择。它确实支持 PKCS#7(PKCS#7 也称为 CMS)。

    他们的测试可能是寻找示例代码的好地方:EnvelopedDataStreamTest.cs

    【讨论】:

    • 啊,我不知道c#版本。几年前在 Java 中使用过它,我知道它在那个版本中支持 PKCS#7。奇怪我在谷歌搜索时没有找到这个。但是,感谢您指出:-)
    【解决方案2】:

    我找到了an example 如何在 C# 中解密 PKCS#7。这可能足以让您入门。

    【讨论】:

    • 唯一的问题是您的示例似乎是对文件进行操作,而不是解密流。
    • 另外,Chilkat 是商业的,但 BouncyCastle 是开源和免费的。
    【解决方案3】:

    .Net Framework 2.0 提供了 pkcs 命名空间,帮助我们在 pkcs#7 标准中进行签名/加密/解密。请在此处查看概述http://msdn.microsoft.com/en-us/library/bb885086.aspx,并在此处查看一个很好的示例 http:**msdn.microsoft.com/en-us/library/bb924565.aspx。

    【讨论】:

      【解决方案4】:

      您是否可以选择从 http://www.bouncycastle.org/csharp/ 更改为使用 BouncyCastle API,因为它使用流进行解密。

      但是,我不相信它可以使用 PKCS#7 加密数据,因此您还需要将 BouncyCastle 用于加密方面。

      以下是使用此 API 的示例: http://elian.co.uk/post/2009/07/29/Bouncy-Castle-CSharp.aspx

      如果你想使用 .NET 的东西,这可能很有用: http://www.geekpedia.com/tutorial227_Encrypting-and-Decrypting-Files-with-Csharp.html

      【讨论】:

      • Bouncy Castle for C# 确实可以使用 PKCS#7 方案进行加密和解密。然而,他们称之为 CMS(加密消息传递语法),这是 PKCS#7 定义的。所以使用 Bouncy Castle 来解决这个问题非常有效。
      • @Johnny Egeland - 谢谢,我没有意识到 PKCS#7 == CMS
      猜你喜欢
      • 2021-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 2017-01-31
      • 1970-01-01
      相关资源
      最近更新 更多