2015-06-05 2 views
0

Мне нужно перевести этот код .Net для BouncyCastle кода, потому что мне нужно использовать в моноCMS Подпись X509 Certificate с Замок Надувной

X509Certificate2 certFirmante = LoadCertFromFile("sign.p12"); 
ContentInfo infoContenido = new ContentInfo(argBytesMsg); 

SignedCms cmsFirmado = new SignedCms(infoContenido); 
CmsSigner cmsFirmante = new CmsSigner(argCertFirmante); 

cmsFirmante.IncludeOption = X509IncludeOption.EndCertOnly; 

cmsFirmado.ComputeSignature(cmsFirmante, true); 

return cmsFirmado.Encode(); 

Стараюсь с этим кодом, но подписанных данных не то же самое

CmsSignedDataGenerator gen = new CmsSignedDataGenerator(); 
CmsEnvelopedDataStreamGenerator dataGenerator = new CmsEnvelopedDataStreamGenerator(); 


dataGenerator.AddKeyTransRecipient(cert); 

// Make the output stream 
MemoryStream outStream = new MemoryStream(); 
// Sign the stream 
Stream cryptoStream = dataGenerator.Open(outStream, CmsEnvelopedGenerator.Aes128Cbc); 
BinaryWriter binWriter = new BinaryWriter(cryptoStream); 
binWriter.Write(datos); 

byte[] contenido = new byte[outStream.Length]; 

outStream.Read(contenido, 0, Convert.ToInt32(outStream.Length)); 
return contenido; 

ответ

0

То, что вы хотите, вероятно, что-то больше, как это:

byte[] Sign (byte[] argBytesMsg) 
{ 
    var signedData = new CmsSignedDataStreamGenerator(); 
    var x509certificate2 = LoadCertFromFile ("sign.p12"); 
    var cert = DotNetUtilities.FromX509Certificate (x509certificate2); 
    var key = DotNetUtilities.GetKeyPair (x509certificate2.PrivateKey); 

    signedData.AddSigner (key.PrivateKey, cert, X509ObjectIdentifiers.IdSha1.Id, null, null); 

    signedData.AddCertificate (cert); 

    using (var memory = new MemoryStream()) { 
     using (var stream = signedData.Open (memory, true)) 
      stream.Write (argBytesMsg, 0, argBytesMsg.Length); 

     return memory.ToArray(); 
    } 
} 

Кстати, у вас considere d используя MimeKit вместо того, чтобы пытаться сделать это самостоятельно?

MimeKit использует BouncyCastle, а также кроссплатформенность и полностью открытый источник.

Смежные вопросы