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:
Alguien me podría ayudarme con lo que falta o sobra para lograr obtener un sello válido.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("-----------------------------------------");
Gracias.