Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Assinatura Digital

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    C# Assinatura Digital

    Galera, estou desenvolvendo um sistema com C# e usando a biblioteca itextsharp para assinar um pdf digitalmente com um certificado do tipo A3(SmartCard).

    Bom eu consegui proceder com a assinatura, mas na hora que eu abro o pef gerado ele aparece com uma assinatura inválida.

    Segue o código:

    Código:
    X509Certificate2Collection lcerts;
                X509Store lStore = new X509Store (StoreName.My, StoreLocation.CurrentUser);
                // Abre o Store
                lStore.Open(OpenFlags.ReadOnly);
                // Lista os certificados
                lcerts = lStore.Certificates;
                foreach (X509Certificate2 cert in lcerts)
                {
                    if (cert.HasPrivateKey && cert.NotAfter > DateTime.Now && cert.NotBefore < DateTime.Now)
                    {
                        System.Security.Cryptography.AsymmetricAlgorithm alg =
                        cert.PrivateKey;
                        System.Security.Cryptography.RSACryptoServiceProvider rsa
                        = (System.Security.Cryptography.RSACryptoServiceProvider)alg;
    
                        org.bouncycastle.x509.X509Certificate bcCert = new
                        org.bouncycastle.x509.X509Certificate(cert.GetRawCertData());
    
                        PdfReader reader = new PdfReader(inputBox.Text);
                        reader.Appendable = true;
                        PdfStamper stamper = PdfStamper.CreateSignature(reader,
                        new FileStream(outputBox.Text, FileMode.Create, FileAccess.Write), '\0',null,true);
                        PdfSignatureAppearance sap = stamper.SignatureAppearance;
    
    
                        sap.SetCrypto(null, new
                        org.bouncycastle.x509.X509Certificate[] { bcCert }, null,
                        PdfSignatureAppearance.WINCER_SIGNED);
                        //sap.Reason = "Wincert demo";
                        //sap.Location = "LBC";
                        //sap.SignDate = DateTime.Now;
                        sap.SetVisibleSignature(new iTextSharp.text.Rectangle(100, 100, 250, 150), 1, null);
    
                        sap.SetExternalDigest(new byte[128], null, "RSA");
                       
                        sap.PreClose();
                        System.Security.Cryptography.SHA1 messageDigest =
                        System.Security.Cryptography.SHA1.Create();
                        byte[] hash = messageDigest.ComputeHash(sap.RangeStream);
                        PdfSigGenericPKCS sg = sap.SigStandard;
                        PdfLiteral slit = (PdfLiteral)sg.Get(PdfName.CONTENTS);
                        PdfPKCS7 sig = sg.Signer;
    
                        byte[] signedHash = rsa.SignHash(hash, "SHA1");
                        sig.SetExternalDigest(signedHash, null, "RSA");
                        PdfDictionary dic = new PdfDictionary();
                        
                        dic.Put(PdfName.CONTENTS, new
                        PdfString(sig.GetEncodedPKCS1()).SetHexWriting(true));
    
                        sap.Close(dic);
    
                        debug("Assinado");
                    }
                }
                lStore.Close();
    Alguém poderia me ajudar? Estou precisando muito fazer isso funcionar.

    Obrigado
    Last edited by WCG147; 09-03-2012, 00:29.

  • Font Size
    #2
    entra no site do marcoratti

    Comment

    X
    Working...
    X