2008-09-23 17 views
6

我的任务是在C#中为公司项目实施PKI库,并且一直未能找到它的良好实现。似乎有多个库,以及许多指向已被删除的MSDN库的断开链接。我曾见过使用Crypt32.dll的人,构建自己的库的人,使用P/Invoke访问系统证书库的人,扩展内置库的人员,不适用于C#的示例(例如Java示例),和商业图书馆。加密库?

我的问题是,哪种实现/库最推荐用于简单的数据加密/解密?

作为我打算处理它的一些背景,我只需要使用私钥(.pfx)对消息进行加密,然后使用公钥(.cer)进行解密。尽管可能在将来,但在项目的这个级别上不需要消息签名和身份验证。 我见过参考加密长度,这让我感到不安。我们需要能够加密任何长度的消息(当然是合理的!)。这是我需要担心的事情吗?如果是的话,是否有办法处理它?

如果可能的话,我不希望将公钥/私钥存储在Windows证书管理器中,但是如果它使得实现更简单,那就这么做吧。

我实现PKI和加密是一个庞大而复杂的问题,但我希望有一个相对简单的库反正...(我们有希望,对吧?)

谢谢!

回答

12

那么,你没有提到内置类不能满足你的需要,那么System.Security.Cryptography.RSACryptoServiceProvider怎么样?

它有一个大集合格的方式来非对称地加密/解密流。

有几个教程/指南,带你一路走来:

http://www.codeproject.com/KB/security/RSACryptoPad.aspx

http://www.eggheadcafe.com/articles/20020630.asp

有无数更通过Google被发现。

更新:关于长度限制,如果您只是在加密和解密两端实现相同的缓冲区算法,它应该不会有任何问题。

UPDATE2:是的,我的例子是RSACryptoProvider,但你可以使用任何派生类从System.Security.Cryptography.AsymmetricAlgorithm,如果你想有一个公钥/私钥的解决方案。或者建立自己的...或者可能不是:)

+0

其实一个很好的教程,整个System.Security.Cryptography命名空间的应用。它应该包含大多数密码系统所需的所有原语。 – 2008-09-23 10:35:17

0

是的,内置类有什么问题?

如果你不想使用Windows证书商店,你可以使用类似这样

RSACryptoServiceProvider rscp = new RSACryptoServiceProvider(); 
rscp.FromXmlString("<RSAKeyValue><Modulus>key data gere</Modulus><Exponent></Exponent></RSAKeyValue>"); 

不知道这是私钥是个好主意,但。

有关于这个问题here