Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/03/2013, 15:19
glook_cl
 
Fecha de Ingreso: marzo-2013
Mensajes: 5
Antigüedad: 11 años, 9 meses
Puntos: 0
Factura Electrónica MX 3.2 CFDI Visual C#

Hola,

He seguido otros hilos del foro para la facturación electrónica, utilizando la clase "clsSeguridad.cs" y haciendo ajustes para las nuevas definiciones.
Sin embargo, todos los Sellos que logro obtener, siempre son inválidos en el validador del SAT ([URL="https://www.consulta.sat.gob.mx/sicofi_web/moduloecfd_plus/validadorcfdi/validador%20cfdi.html"]https://www.consulta.sat.gob.mx/sicofi_web/moduloecfd_plus/validadorcfdi/validador%20cfdi.html[/URL])

Parte del Código:

Código:
string ArchivoCertificado = @"c:\aaa010101aaa__csd_01.cer";
            string key = @"c:\aaa010101aaa__csd_01.key";
            string lPassword = @"12345678a";
            string Digestion = "";
            string strCadenaOriginal = "*** Cadena Original Utilizando XSLT del SAT";

            // SAH1
            SHA1 oSHA1 = SHA1CryptoServiceProvider.Create();
            Byte[] textOriginal = Encoding.UTF8.GetBytes(strCadenaOriginal);
            Byte[] hash = oSHA1.ComputeHash(textOriginal);
            StringBuilder oSB = new StringBuilder();
            foreach (byte i in hash)
                oSB.AppendFormat("{0:x2}", i);
            Digestion= oSB.ToString();
            
            // leer KEY
            SecureString lSecStr = new SecureString();
            lSecStr.Clear();
            foreach (char c in lPassword.ToCharArray())
                lSecStr.AppendChar(c);

            Byte[] pLlavePrivadaenBytes = System.IO.File.ReadAllBytes(key);

            // Uso clSeguridad para Leer Certificado
            RSACryptoServiceProvider lrsa = clsSeguridad.DecodeEncryptedPrivateKeyInfo(pLlavePrivadaenBytes, lSecStr);
            SHA1CryptoServiceProvider hasher = new SHA1CryptoServiceProvider();
            Byte[] bytesFirmados = lrsa.SignData(System.Text.Encoding.UTF8.GetBytes(Digestion), hasher);

            // Obtengo Sello
            string sellodigital = Convert.ToBase64String(bytesFirmados);

            // Open Certificado
            X509Certificate2 certificado = new X509Certificate2(ArchivoCertificado);

            // Obtengo Datos
            String NoCertificado = HexToString(certificado.SerialNumber);
            String Certificado = Convert.ToBase64String(certificado.RawData);

            // Resultado //
            Console.WriteLine("-----------------------------------------");
            Console.WriteLine("Sello=" + sellodigital);
            Console.WriteLine("NoCertificado=" + NoCertificado);
            Console.WriteLine("Certificado=" + Certificado);
            Console.WriteLine("-----------------------------------------");
Alguien me podría ayudarme con lo que falta o sobra para lograr obtener un sello válido.

Gracias.