Imagen

DESCARGA SOFTWARE PARA FACTURA ELECTRONICA DE AQUI.
Facturacion, Validacion, Addendas, Librerias de programacion, etc.


CARTA PORTE V3.1

ECODEX TIENE ESTOS NUEVOS DATOS DE CONTACTO :
Comercializacion y Ventas - Evelia Vicke evicke@ecodex.com.mx 33-16-03-03-48
Soporte - Humberto Guerrero soporte@ecodex.com.mx 33-34-90-46-03


.

Generar SHA256 en C#

Y para empezar Que es una Factura Electronica? Como empiezo? Necesito Autorizacion? Que medios hay para Facturar Electronicamente? estos y todos los temas de iniciacion deberan estar aqui
gerloxxx
Mensajes: 35
Registrado: Sab Feb 12, 2011 10:32 am

Generar SHA256 en C#

Mensaje por gerloxxx »

Hola a todos, estoy intentando usar la clase SHA256CryptoServiceProvider para generar el SHA256:


System.Security.Cryptography.SHA256CryptoServiceProvider hasher = new System.Security.Cryptography.SHA256CryptoServiceProvider();

pero me marca el siguiente error:


Error 4 El tipo o el nombre del espacio de nombres 'SHA256CryptoServiceProvider' no existe en el espacio de nombres 'System.Security.Cryptography' (¿falta una referencia de ensamblado?)


alguna sugerencia?? uso VS2012

Saludos
RicJaver
Mensajes: 4
Registrado: Vie Jun 16, 2017 10:46 am

Re: Generar SHA256 en C#

Mensaje por RicJaver »

Buenas noches.

Te recomiendo la siguiente liga:

https://www.codeproject.com/Tips/703567 ... private-ke

Para generar el sello como Sha256, solo cambiar new SHA1CryptoServiceProvider()); por
new SHA256CryptoServiceProvider());

Espero te sea de utilidad.
gerloxxx
Mensajes: 35
Registrado: Sab Feb 12, 2011 10:32 am

Re: Generar SHA256 en C#

Mensaje por gerloxxx »

Gracias por responder, ya uso la clase opensslkey y en el cambio que comentas es donde me marca el error:
antes:
System.Security.Cryptography.SHA1CryptoServiceProvider hasher = new System.Security.Cryptography.SHA1CryptoServiceProvider();
ahora:
System.Security.Cryptography.SHA256CryptoServiceProvider hasher = new System.Security.Cryptography.SHA256CryptoServiceProvider();

pero no entiendo porque no reconoce SHA256CryptoServiceProvider, ya lei la documentacion y algunos ejemplo que encontre que lo usan.

saludos
gerloxxx
Mensajes: 35
Registrado: Sab Feb 12, 2011 10:32 am

Re: Generar SHA256 en C#

Mensaje por gerloxxx »

ahorita me acabo de encontrar esto:

byte[] bytesFirmados = rsa.SignData(System.Text.Encoding.UTF8.GetBytes(strCadenaOriginal), System.Security.Cryptography.CryptoConfig.MapNameToOID("SHA256"));

donde:
System.Security.Cryptography.CryptoConfig.MapNameToOID("SHA256"));
en lugar de:
System.Security.Cryptography.SHA256CryptoServiceProvider hasher = new System.Security.Cryptography.SHA256CryptoServiceProvider();

espero me sirva
RicJaver
Mensajes: 4
Registrado: Vie Jun 16, 2017 10:46 am

Re: Generar SHA256 en C#

Mensaje por RicJaver »

Buenos días.

Pues si, en la función SignString que en en el artículo de CodeProject es:

public string SignString(string pKeyFile,string pPassword,string OriginalString)
{
string SignedString = "";
string filename = pKeyFile;
if (!File.Exists(filename))
{
return ".key file does not exist " + pKeyFile;
}

RSACryptoServiceProvider rsa=OpenKeyFile(filename, pPassword);
if (rsa != null)
{
byte[] CO=Encoding.UTF8.GetBytes(OriginalString);
byte[] SignedBytes=rsa.SignData(CO, new SHA1CryptoServiceProvider());
SignedString = Convert.ToBase64String(SignedBytes);
}
return SignedString;
}

Simplemente cambiar byte[] SignedBytes=rsa.SignData(CO, new SHA1CryptoServiceProvider()); por
byte[] SignedBytes=rsa.SignData(CO, new SHA256CryptoServiceProvider());
que entiendo que es lo que estas haciendo, asi que seguro funciona.

Saludos y suerte.
gerloxxx
Mensajes: 35
Registrado: Sab Feb 12, 2011 10:32 am

Re: Generar SHA256 en C#

Mensaje por gerloxxx »

gracias por responder, creo que no me han entendido.... mi compilador dice que esto: "SHA256CryptoServiceProvider()" no existe :( (System.Security.Cryptography)
RicJaver
Mensajes: 4
Registrado: Vie Jun 16, 2017 10:46 am

Re: Generar SHA256 en C#

Mensaje por RicJaver »

Tienes razón, no entendía el problema.

En el hilo: http://www.validacfd.com/phpbb3/viewtopic.php?t=6699



robsgax
Mensajes: 1
Registrado: Lun Abr 10, 2017 8:18 pm
Re: Como crear el Sello con SHA256 en VBNET o C#
Mensajepor robsgax » Lun Abr 10, 2017 8:24 pm

este es el que uso yo, el del SHA256CryptoServiceProvider no funciona en librerias .net por un bug

CÓDIGO: SELECCIONAR TODO
Dim privateCert As New X509Certificate2(archivoPFX, clavePFX, X509KeyStorageFlags.Exportable)
Dim privateKey As RSACryptoServiceProvider = DirectCast(cert.PrivateKey, RSACryptoServiceProvider)
Dim privateKey1 As New RSACryptoServiceProvider()
privateKey1.ImportParameters(privateKey.ExportParameters(True))

Dim signature As Byte() = privateKey1.SignData(stringCadenaOriginal, "SHA256")

dim sello256 as string = Convert.ToBase64String(signature)

para verificar el sello
Dim isValid As Boolean = privateKey1.VerifyData(stringCadenaOriginal, "SHA256", signature)

Entonces, el usuario robsgax señala "el del SHA256CryptoServiceProvider no funciona en librerias .net por un bug", pero da la solución.

Como comentario, yo uso VS Community 2017, y no tengo ningún problema.

Saludos.
gerloxxx
Mensajes: 35
Registrado: Sab Feb 12, 2011 10:32 am

Re: Generar SHA256 en C#

Mensaje por gerloxxx »

gracias, como comentario, estoy probando MapNameToOID("SHA256") en lugar de SHA256CryptoServiceProvider, el validador ValidaCfd de este foro me lo marca como correcto aunque aun no he timbrado

saludos
jivra
Mensajes: 1
Registrado: Mar Ago 22, 2017 10:33 pm

Re: Generar SHA256 en C#

Mensaje por jivra »

Agradezco a:
RicJaver » Sab Jul 29, 2017 12:40 pm
y
robsgax » Lun Abr 10, 2017 8:24 pm

Aquí dejo esta rutina, la cual ya me devuelve un sello valido:

Código: Seleccionar todo

Public Function GeneraSelloDigitalSHA256(ByVal ArchivoP12 As String, ByVal LlavePrivada As String, ByVal CadenaOriginal As String) As String

        Dim privateCert As New X509Certificate2(ArchivoP12, LlavePrivada, X509KeyStorageFlags.Exportable)

        Dim privateKey As RSACryptoServiceProvider = DirectCast(privateCert.PrivateKey, RSACryptoServiceProvider)
        Dim privateKey1 As New RSACryptoServiceProvider()
        privateKey1.ImportParameters(privateKey.ExportParameters(True))

        Dim signature As Byte() = privateKey1.SignData(System.Text.Encoding.UTF8.GetBytes(CadenaOriginal), "SHA256")

        Dim sello256 As String = Convert.ToBase64String(signature)
        MsgBox("Sello: " & sello256)

        Dim isValid As Boolean = privateKey1.VerifyData(System.Text.Encoding.UTF8.GetBytes(CadenaOriginal), "SHA256", signature)
        MsgBox("Validacion: " & isValid)

        Return sello256

    End Function
carlosph85
Mensajes: 1
Registrado: Lun Nov 27, 2017 3:34 pm

Re: Generar SHA256 en C#

Mensaje por carlosph85 »

gerloxxx escribió:ahorita me acabo de encontrar esto:

byte[] bytesFirmados = rsa.SignData(System.Text.Encoding.UTF8.GetBytes(strCadenaOriginal), System.Security.Cryptography.CryptoConfig.MapNameToOID("SHA256"));

donde:
System.Security.Cryptography.CryptoConfig.MapNameToOID("SHA256"));
en lugar de:
System.Security.Cryptography.SHA256CryptoServiceProvider hasher = new System.Security.Cryptography.SHA256CryptoServiceProvider();

espero me sirva
Hola Buenas tardes, lograste resolver este tema? Yo lo estoy haciendo sobre vb.net, si me funciona el SHA256CryptoServiceProvider sin embargo el sello que genera la validación me lo marca como incorrecto, no lo logro timbrar
Cerrado