我有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#”编写替代代码?
答案 0 :(得分:0)
Org.BouncyCastle.Pkcs有一个用于处理PKCS#12商店的类。 Org.BouncyCastle.Cms有用于处理CMS消息的类。
源代码中有相应的测试类,显示了使用的基本知识,例如: Pkcs12Store(Builder)和CmsSignedData(Generator)。