/// <summary> /// Sello digital SHA256 para la version 3.3 /// </summary> /// <param name="noCertificado"></param> /// <param name="certificadoB64"></param> /// <param name="cadenaOriginal"></param> /// <param name="datos"></param> /// <returns></returns> public static string GetSelloDigitalEmisor33(ref string noCertificado, ref string certificadoB64, string cadenaOriginal, PathsCertificado datos) { string selloDigital = null; try { CertificadoDigital cert = GetCertificadoDigital(datos.PathArchivoCer); noCertificado = cert.NoCertificado; certificadoB64 = cert.CertificadoBase64; SecureString identidad = new SecureString(); identidad.Clear(); foreach (var c in datos.Password.ToCharArray()) { identidad.AppendChar(c); } byte[] llavePrivadaBytes = File.ReadAllBytes(datos.PathArchivoKey); RSACryptoServiceProvider lrsa = opensslkey.DecodeEncryptedPrivateKeyInfo(llavePrivadaBytes, identidad); SHA256CryptoServiceProvider hasher = new SHA256CryptoServiceProvider(); byte[] bytesFirmados = lrsa.SignData(Encoding.UTF8.GetBytes(cadenaOriginal), hasher); //bool isValid = lrsa.VerifyData(Encoding.UTF8.GetBytes(cadenaOriginal), hasher, bytesFirmados); selloDigital = Convert.ToBase64String(bytesFirmados); return(selloDigital); } catch (Exception ex) { return(selloDigital); } }
/// <summary> /// Metodo donde ser realizaron varias formas para obtener el Sello a SHA256 /// </summary> /// <param name="noCertificado"></param> /// <param name="certificadoB64"></param> /// <param name="cadenaOriginal"></param> /// <param name="datos"></param> /// <returns></returns> public static string GetSelloDigitalEmisor33123(ref string noCertificado, ref string certificadoB64, string cadenaOriginal, PathsCertificado datos) { string selloDigital = ""; CertificadoDigital cert = GetCertificadoDigital(datos.PathArchivoCer); noCertificado = cert.NoCertificado; certificadoB64 = cert.CertificadoBase64; //Metodo 1 SecureString identidad = new SecureString(); identidad.Clear(); foreach (var c in datos.Password.ToCharArray()) { identidad.AppendChar(c); } byte[] llavePrivadaBytes = File.ReadAllBytes(datos.PathArchivoKey); var data = Encoding.UTF8.GetBytes(cadenaOriginal); //METODO SHA1 RSACryptoServiceProvider lrsa0 = opensslkey.DecodeEncryptedPrivateKeyInfo(llavePrivadaBytes, identidad); SHA1CryptoServiceProvider hasher0 = new SHA1CryptoServiceProvider(); byte[] bytesFirmados0 = lrsa0.SignData(Encoding.UTF8.GetBytes(cadenaOriginal), hasher0); var selloDigital0 = Convert.ToBase64String(bytesFirmados0); #region METODO 1 RSACryptoServiceProvider lrsa1 = opensslkey.DecodeEncryptedPrivateKeyInfo(llavePrivadaBytes, identidad); SHA256CryptoServiceProvider hasher1 = new SHA256CryptoServiceProvider(); byte[] bytesFirmados1 = lrsa1.SignData(data, hasher1); //byte[] bytesFirmados11 = lrsa1.SignData(data, "sha256"); bool isValid = lrsa1.VerifyData(data, hasher1, bytesFirmados1); //byte[] bytesFirmados111 = lrsa1.SignData(data, HashAlgorithmName.SHA256); //var selloDigital11 = Convert.ToBase64String(bytesFirmados11); //var selloDigital111 = Convert.ToBase64String(bytesFirmados111); selloDigital = Convert.ToBase64String(bytesFirmados1); #endregion #region METODO 2 RSACryptoServiceProvider lrsa2 = opensslkey.DecodeEncryptedPrivateKeyInfo(llavePrivadaBytes, identidad); SHA256 sha256 = SHA256Managed.Create(); byte[] bytes2 = Encoding.UTF8.GetBytes(cadenaOriginal); byte[] hash = sha256.ComputeHash(bytes2); //return GetStringFromHash(hash); //CryptoConfig.CreateFromName("SHA256"); byte[] bytesFirmados2 = lrsa2.SignData(data, sha256); var selloDigital2 = Convert.ToBase64String(bytesFirmados2); #endregion #region METODO 3 RSACryptoServiceProvider lrsa3 = opensslkey.DecodeEncryptedPrivateKeyInfo(llavePrivadaBytes, identidad); Byte[] inputBytes = Encoding.UTF8.GetBytes(cadenaOriginal); SHA256CryptoServiceProvider sha3 = new SHA256CryptoServiceProvider(); Byte[] hashedBytes = sha3.ComputeHash(inputBytes); byte[] bytesFirmados3 = lrsa3.SignData(data, sha3); var selloDigital3 = Convert.ToBase64String(bytesFirmados3); #endregion #region METODO 4 string strSello = string.Empty; RSACryptoServiceProvider rsa4 = opensslkey.DecodeEncryptedPrivateKeyInfo(llavePrivadaBytes, identidad); SHA256Managed sha = new SHA256Managed(); UTF8Encoding encoding = new UTF8Encoding(); byte[] bytes = encoding.GetBytes(cadenaOriginal); byte[] digest = sha.ComputeHash(bytes); RSAPKCS1SignatureFormatter rsaFormatter = new RSAPKCS1SignatureFormatter(rsa4); rsaFormatter.SetHashAlgorithm("SHA256"); byte[] signedHashValue4 = rsaFormatter.CreateSignature(digest); SHA256CryptoServiceProvider hasher4 = new SHA256CryptoServiceProvider(); byte[] bytesFirmados4 = rsa4.SignData(System.Text.Encoding.UTF8.GetBytes(cadenaOriginal), hasher4); strSello = Convert.ToBase64String(bytesFirmados4); // Y aquí está el sello string strSello256 = Convert.ToBase64String(signedHashValue4); // Y aquí está el sello 2 #endregion #region METODO 5 //X509Certificate2 miCertificado5 = new X509Certificate2(datos.PathArchivoCer, datos.Password); //RSACryptoServiceProvider rsa5 = (RSACryptoServiceProvider)miCertificado5.PrivateKey; //SHA256CryptoServiceProvider hasher5 = new SHA256CryptoServiceProvider(); //UTF8Encoding e = new UTF8Encoding(true); ////byte[] signature = RSA1.SignHash(hasher5, CryptoConfig.MapNameToOID("SHA256")); //byte[] bytesFirmados5 = rsa5.SignData(e.GetBytes(cadenaOriginal), hasher5); //var selloDigital5 = Convert.ToBase64String(bytesFirmados5); #endregion #region METODO 6 //System.Security.Cryptography.X509Certificates.X509Certificate2 miCertificado6 = new System.Security.Cryptography.X509Certificates.X509Certificate2(datos.PathArchivoCer, datos.Password); // GetRSAPrivateKey returns an object with an independent lifetime, so it should be // handled via a using statement. //using (RSA rsa6 = miCertificado6.GetRSAPrivateKey()) //{ // RSA now exposes SignData, and the hash algorithm parameter takes a strong type, // which allows for IntelliSense hints. //var bytesFirmados6 = rsa6.SignData(data, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); //var selloDigital6 = Convert.ToBase64String(bytesFirmados6); //} #endregion return(selloDigital); }
public string GenerarSello33(string strXmlSinSello33, string pathCadenaOriginalXslt33, PathsCertificado objCfdi, ref string cadenaOriginal) { try { var noCertificado = ""; var certificadoB64 = ""; strXmlSinSello33 = strXmlSinSello33.Replace("&", "&"); if (!File.Exists(pathCadenaOriginalXslt33)) { throw new InvalidOperationException($"No se encontro el archivo: {strXmlSinSello33}"); } cadenaOriginal = MCfdi.GetCadenaOriginal(strXmlSinSello33, pathCadenaOriginalXslt33); // proceso para generar el sello var sello = MCfdi.GetSelloDigitalEmisor33(ref noCertificado, ref certificadoB64, cadenaOriginal, objCfdi); return(sello); } catch (Exception ex) { return(null); } }