如何使用Mono Framework和BouncyCastle API生成CMS(加密消息语法)?

时间:2011-03-04 21:05:50

标签: mono cryptography bouncycastle

我有PKCS#12格式的证书,我需要生成CMS签名(加密消息语法)。由于“Mono Framework”没有完整实现的“System.Security.Cryptography”程序集,我正在尝试使用“Bouncy Castle API for C#”。

所以,使用“Bouncy Castle”,我需要为我在DOTNET上写的代码编写替代代码。

DOT NET上的代码如下:

X509Certificate2 crt = new X509Certificate2();

byte[] crtBytes = [ certificate in the format PKCS12 (certificate + private key) obtained using FileStream class]

crt.Import(crtBytes, "123456", X509KeyStorageFlags.DefaultKeySet);

Encoding msgCodificado = Encoding.UTF8;

byte[] msgBytes = msgCodificado.GetBytes(xmlTRA.OuterXml); // xmlTRA.OuterXml is the data to sign

ContentInfo pkcsContentInfo = new ContentInfo(msgBytes);

SignedCms cms = new SignedCms(pkcsContentInfo);
CmsSigner firmante = new CmsSigner(crt);

firmante.IncludeOption = X509IncludeOption.EndCertOnly;
cms.ComputeSignature(firmante); // ---> throw an cryptografy exception with MONO

byte[] firma = cms.Encode();
firmaB64 = Convert.ToBase64String(firma);

任何人都知道如何使用“Bouncy Castle API for C#”编写替代代码?

1 个答案:

答案 0 :(得分:0)

Org.BouncyCastle.Pkcs有一个用于处理PKCS#12商店的类。 Org.BouncyCastle.Cms有用于处理CMS消息的类。

源代码中有相应的测试类,显示了使用的基本知识,例如: Pkcs12Store(Builder)和CmsSignedData(Generator)。