Esempio n. 1
0
        /// <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);
            }
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        public string GenerarSello33(string strXmlSinSello33, string pathCadenaOriginalXslt33, PathsCertificado objCfdi, ref string cadenaOriginal)
        {
            try
            {
                var noCertificado  = "";
                var certificadoB64 = "";

                strXmlSinSello33 = strXmlSinSello33.Replace("&", "&amp;");

                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);
            }
        }