我的任务是在C#中为公司项目实现PKI库,并且无法找到它的良好实现。似乎有多个库,并且许多断开的链接指向已删除的MSDN库。我见过人们使用Crypt32.dll,人们建立他们自己的库,人们使用P / Invoke访问系统证书存储,人们扩展内置库,示例根本不适用于C#(例如Java示例),和商业图书馆。
我的问题是,对于数据的简单加密/解密,最推荐使用哪种实现/库?
作为我计划用它做的一些背景知识,我只需要使用私钥(.pfx)加密消息,并使用公钥(.cer)解密。在此级别的项目中不需要消息签名和身份验证,尽管可能在将来。 我看到加密长度的参考让我感到不安。我们需要能够加密任何长度的消息(理所当然!)。这是我需要担心的事情,如果有的话,有没有办法解决它?
如果可能的话,我宁愿不在Windows证书管理器中存储公钥/私钥,但是如果它使实现变得更加简单,那就这样吧。
我意识到PKI和加密是一个庞大而复杂的主题,但我希望有一个相对简单的库...(人们可以希望,对吗?)
谢谢!
答案 0 :(得分: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的任何类 - 解。或者建立自己的......或者不是:)
答案 1 :(得分:0)
是的,内置类有什么问题?
如果您不想使用Windows证书存储,则可以使用此类
RSACryptoServiceProvider rscp = new RSACryptoServiceProvider();
rscp.FromXmlString("<RSAKeyValue><Modulus>key data gere</Modulus><Exponent></Exponent></RSAKeyValue>");
不确定这对于私钥是个好主意。
关于这个主题有一个很好的教程here