/// <summary> /// Metodo encargado de firmar la cadena original en formato UTF8 con algoritmo de digestion SHA256 /// </summary> /// <param name="cadenaUTF8"></param> /// <param name="rutaArchivoKey"></param> /// <param name="contraseñaKey"></param> /// <returns></returns> public static string FirmaCadenaSHA256(byte[] cadenaUTF8, string rutaArchivoKey, string contraseñaKey) { //Inicialziando variable de retorno string sello = ""; //Convertimos el archivo contraseña a un arreglo de bytes byte[] bytesCertificado = System.IO.File.ReadAllBytes(rutaArchivoKey); //Obtenemos la contraseña en tipo SecureString SecureString contraseña = Cadena.CadenaSegura(contraseñaKey); //Obtenemos un proveedor de RSA se leen los valores del archivo certificado y se inicializa el proveedor RSA RSACryptoServiceProvider RSA = CertificadosOpenSSLKey.DecodeEncryptedPrivateKeyInfo(bytesCertificado, contraseña); //Si fue posible realizar apertura if (RSA != null) { //Instanciamos un objeto hash MD5 SHA256CryptoServiceProvider SHA256 = new SHA256CryptoServiceProvider(); //Firmamos los datos byte[] datosFirmados = RSA.SignData(cadenaUTF8, SHA256); //Convertimos los datos a caracteres imprimibles sello = Convert.ToBase64String(datosFirmados); } //Devolviendo el resultado de la firma return(sello); }
/// <summary> /// Metodo encargado de firmar la cadena original en formato UTF8 con algoritmo de digestion MD5 /// </summary> /// <param name="cadenaMD5">Cadena en formato UTF8 que será firmada</param> /// <param name="rutaArchivoKey">Ruta física de almacenamiento de la llave privada</param> /// <param name="contraseñaKey">Contraseña para abrir la llave privada</param> public static string FirmaCadenaMD5(byte[] cadenaUTF8, string rutaArchivoKey, string contraseñaKey) { //Declarando variable de retorno string sello = ""; //Obtenemos la contraseña en tipo SecureString SecureString contraseña = Cadena.CadenaSegura(contraseñaKey); //Convertimos el archivo contraseña a un arreglo de bytes byte[] archivoKeyBytes = System.IO.File.ReadAllBytes(rutaArchivoKey); //Obtenemos un proveedor de RSA se leen los valores del archivo certificado y se inicializa el proveedor RSA RSACryptoServiceProvider RSA = CertificadosOpenSSLKey.DecodeEncryptedPrivateKeyInfo(archivoKeyBytes, contraseña); //Instanciamos un objeto hash MD5 MD5CryptoServiceProvider MD5 = new MD5CryptoServiceProvider(); //Firmamos los datos byte[] datosFirmados = RSA.SignData(cadenaUTF8, MD5); //Convertimos los datos a caracteres imprimibles sello = Convert.ToBase64String(datosFirmados); //Devolvinedo resultado return(sello); }
/// <summary> /// Metodo encargado de firmar la cadena original en formato UTF8 con algoritmo de digestion SHA256 /// </summary> /// <param name="cadenaUTF8"></param> /// <param name="bytesCertificado"></param> /// <param name="contraseñaKey"></param> /// <returns></returns> public static string FirmaCadenaSHA256(byte[] cadenaUTF8, byte[] bytesCertificado, string contraseñaKey) { //Inicialziando variable de retorno string sello = ""; byte[] datosFirmados = null; //Obtenemos la contraseña en tipo SecureString SecureString contraseña = Cadena.CadenaSegura(contraseñaKey); SHA256Managed sham = new SHA256Managed(); //Obtenemos un proveedor de RSA se leen los valores del archivo certificado y se inicializa el proveedor RSA RSACryptoServiceProvider RSA = CertificadosOpenSSLKey.DecodeEncryptedPrivateKeyInfo(bytesCertificado, contraseña); //Si fue posible realizar apertura if (RSA != null) { try { //Firmando Cadena datosFirmados = RSA.SignData(cadenaUTF8, sham); //Convirtiendo Valor en Cadena sello = Convert.ToBase64String(datosFirmados); } catch (Exception ex) { Console.WriteLine(ex.Message); } ////Instanciamos un objeto hash MD5 //SHA256CryptoServiceProvider SHA256 = new SHA256CryptoServiceProvider(); ////Firmamos los datos //byte[] datosFirmados = RSA.SignData(cadenaUTF8, SHA256); ////Convertimos los datos a caracteres imprimibles //sello = Convert.ToBase64String(datosFirmados); /** Firmando con SHA256 **/ //SHA256Managed sha = new SHA256Managed(); //byte[] digest = sha.ComputeHash(cadenaUTF8); //RSAPKCS1SignatureFormatter RSAFormatter = new RSAPKCS1SignatureFormatter(RSA); //RSAFormatter.SetHashAlgorithm("SHA256"); //byte[] SignedHashValue = RSAFormatter.CreateSignature(digest); //sello = Convert.ToBase64String(SignedHashValue); } //Devolviendo el resultado de la firma return(sello); }