
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#
-
- Mensajes: 35
- Registrado: Sab Feb 12, 2011 10:32 am
Generar SHA256 en C#
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
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
-
- Mensajes: 4
- Registrado: Vie Jun 16, 2017 10:46 am
Re: Generar SHA256 en C#
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.
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.
-
- Mensajes: 35
- Registrado: Sab Feb 12, 2011 10:32 am
Re: Generar SHA256 en C#
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
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
-
- Mensajes: 35
- Registrado: Sab Feb 12, 2011 10:32 am
Re: Generar SHA256 en C#
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
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
-
- Mensajes: 4
- Registrado: Vie Jun 16, 2017 10:46 am
Re: Generar SHA256 en C#
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.
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.
-
- Mensajes: 35
- Registrado: Sab Feb 12, 2011 10:32 am
Re: Generar SHA256 en C#
gracias por responder, creo que no me han entendido.... mi compilador dice que esto: "SHA256CryptoServiceProvider()" no existe
(System.Security.Cryptography)

-
- Mensajes: 4
- Registrado: Vie Jun 16, 2017 10:46 am
Re: Generar SHA256 en C#
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.
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.
-
- Mensajes: 35
- Registrado: Sab Feb 12, 2011 10:32 am
Re: Generar SHA256 en C#
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
saludos
-
- Mensajes: 1
- Registrado: Mar Ago 22, 2017 10:33 pm
Re: Generar SHA256 en C#
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:
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
-
- Mensajes: 1
- Registrado: Lun Nov 27, 2017 3:34 pm
Re: Generar SHA256 en C#
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 timbrargerloxxx 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