miércoles, 24 de mayo de 2017

109. Firmar con rsa - SHA256 C# - certificado del almacen de windows

Antes que nada, debo aclarar que la firma de una cadena se efectúa por medio de la clave privada, por lo que deben verificar que la clave privada se encuentren dentro del almacén para posteriormente hacer la firma de la cadena.

Veamos el código y expliquemoslo

//Establecemos el numero de certificado, que se empleara para la firma, dicho certificado deberá estar dentro del almacen de certificados de Windows y deberá tener su clave privada
 string noSerie = "3030323031303030303030313030303030383133";
//Establecemos la cadena que se firmara
 string CadenaAFirmar = "holaMundo";
//Buscamos el certificado que se empleara para la firma dentro del almacén de certificados
 X509Store almacen = null;
 almacen = new X509Store(StoreLocation.LocalMachine);
 almacen.Open(OpenFlags.OpenExistingOnly);
 X509Certificate2Collection Certificados = almacen.Certificates.Find(X509FindType.FindBySerialNumber, noSerie, false);
 X509Certificate2 CertificadoFirma = Certificados[0];
 almacen.Close();

//Se carga la clave privada
RSACryptoServiceProvider csp = null;
csp = (RSACryptoServiceProvider)CertificadoFirma.PrivateKey;
var enhCsp = new RSACryptoServiceProvider().CspKeyContainerInfo;
var cspparametro = new CspParameters(enhCsp.ProviderType, enhCsp.ProviderName, csp.CspKeyContainerInfo.KeyContainerName);
            using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cspparametro))
            {
//Se firma la cadena
                rsa.PersistKeyInCsp = true;
                byte[] bytefirma = rsa.SignData(Encoding.UTF8.GetBytes(CadenaAFirmar), "SHA256");
                return bytefirma;
            }

Felices lineas

1 comentario:

  1. Muy buenos días, como podría realizar la siguiente conversión a c#?

    openssl dgst -sha256 -sign privateKey.key -out file.txt.signature file.txt

    ResponderBorrar