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


.

Iniciando con un validador para la factura

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
Cerrado
ioriyagami
Mensajes: 10
Registrado: Mar Nov 02, 2010 6:08 pm

Iniciando con un validador para la factura

Mensaje por ioriyagami »

Bueno como ya habia posteado lo de C# con Sha1 o md5 que es el code siguiente con la dll bouncycastle:

//Org.BouncyCastle.Crypto.ISigner sigBouncyCastle1 = Org.BouncyCastle.Security.SignerUtilities.GetSigner("MD5WithRSAEncryption");
Org.BouncyCastle.Crypto.ISigner sigBouncyCastle1 = Org.BouncyCastle.Security.SignerUtilities.GetSigner("SHA1WithRSA");
sigBouncyCastle1.Init(true, keyPair.Private);
sigBouncyCastle1.BlockUpdate(plaintext, 0, plaintext.Length);
byte[] signature = sigBouncyCastle1.GenerateSignature();
string EncriptBouncyCastle1 = Convert.ToBase64String(signature);
txt_hash_asp_net.Text = EncriptBouncyCastle1;

Ahora pues para validar el sello contra la cadena original (con nuestra llavesiña publica o certificao) conforme a lo que hace ValidaCFD y El del sat con bouncycastle ahi está la función en C# aunque en java sun hay funciones en internet que relativamente es casi lo mismo con c# aunque se utiliza el pemwriter, aprovechen c-sharperos y vbneteros y asperos:

//Retorna verdadero si el sello es correcto
//DirKeyPublic es el pem del certificado
//Sello son las letras o codificacion sha1
//Cadena origina es la cadena original armada tal cual

public bool VerificaSello(string DirKeyPublic, string Sello, string CadOrig)
{

UTF8Encoding UTF8 = new UTF8Encoding();
//Leo la key public o conocido como certificao
StreamReader keyPublic = new StreamReader(DirKeyPublic);
PemReader pemcertnina = new PemReader(keyPublic); //(Leo en formato pem)
//convierto a el cer a X509Certificado
X509Certificate Cert = (X509Certificate)pemcertnina.ReadObject();

//Convierto de base64 el sello a array bytes
byte[] byteSello = Convert.FromBase64String(Sello);
//Convierto la cadena original a utf8
byte[] CadenaOriginal = UTF8.GetBytes(CadOrig);

//le digo ke va a ser de sha1conrsa sino sería MD5WithRSAEncryption pa los anteriores (firmante)
ISigner Firmador = SignerUtilities.GetSigner("SHA1WithRSA");
//agrego la clave publica ke viene siendo el certificado
Firmador.Init(false, Cert.GetPublicKey());
//paso la cadena original
Firmador.BlockUpdate(CadenaOriginal, 0, CadenaOriginal.Length);
//Valido que este bien
return Firmador.VerifySignature(byteSello);

}

Saludines y denle en me gusta o no me gusta ja ja ja
Se aceptan comentarios malos y criticas destructivas!! o movimiento a programación :P

Lo de abajo es para generar el sello, tomado de foros del web pero ya bien hechecito pero aun falta kitar el endcertificate por si se escapa a veces pero eso se los dejo de tarea aunque no es muy común

public string Sello(string DirKey, string CadenaOriginal)
{
UTF8Encoding UTF8 = new UTF8Encoding();
StreamReader readFile = new StreamReader(DirKey);
byte[] plaintext = UTF8.GetBytes(CadenaOriginal);
PemReader Ocertnina = new PemReader(readFile);
AsymmetricCipherKeyPair o = Ocertnina.ReadObject() as AsymmetricCipherKeyPair;
ISigner sig = SignerUtilities.GetSigner("MD5WithRSAEncryption");
sig.Init(true, o.Private);
sig.BlockUpdate(plaintext, 0, plaintext.Length);
byte[] signature = sig.GenerateSignature();
string Sello = Convert.ToBase64String(signature);
readFile.Close();
readFile = null;
return Sello;
}

ESto es para el numero de certificado de pilón, ya es algo de investigación a lo mejor loque les dejo aquí tambien sacado de foros del web

public string NumeroCertificado(string Dir) //dir del .pem del .cer
{
//*****************************certificado
//Read Public Kei
TextReader trCer = new StreamReader(Dir);
PemReader rdCernina = new PemReader(trCer);
X509Certificate Cert = (X509Certificate)rdCernina.ReadObject();
Org.BouncyCastle.Crypto.AsymmetricKeyParameter pk = Cert.GetPublicKey();
byte[] nSerie = Cert.SerialNumber.ToByteArray();
string nCertificado = Encoding.ASCII.GetString(nSerie);
Cert = null;
trCer.Close();
rdCer.Reader.Close();
return nCertificado;
}

P.D. dejo de tarea los imports o usings ya que pues algo tienen que hacer no?
y pues aki andamos!!
alelayton
Mensajes: 6
Registrado: Sab Feb 05, 2011 11:59 pm

Re: Iniciando con un validador para la factura

Mensaje por alelayton »

Hola amigo, ojala me puedas ayudar tu tienes este método para verificar el sello

Código: Seleccionar todo

public bool VerificaSello(string DirKeyPublic, string Sello, string CadOrig)
{

UTF8Encoding UTF8 = new UTF8Encoding();
//Leo la key public o conocido como certificao
StreamReader keyPublic = new StreamReader(DirKeyPublic);
PemReader pemcertnina = new PemReader(keyPublic); //(Leo en formato pem)
//convierto a el cer a X509Certificado
X509Certificate Cert = (X509Certificate)pemcertnina.ReadObject();

//Convierto de base64 el sello a array bytes
byte[] byteSello = Convert.FromBase64String(Sello);
//Convierto la cadena original a utf8
byte[] CadenaOriginal = UTF8.GetBytes(CadOrig);

//le digo ke va a ser de sha1conrsa sino sería MD5WithRSAEncryption pa los anteriores (firmante)
ISigner Firmador = SignerUtilities.GetSigner("SHA1WithRSA"); 
//agrego la clave publica ke viene siendo el certificado
Firmador.Init(false, Cert.GetPublicKey());
//paso la cadena original
Firmador.BlockUpdate(CadenaOriginal, 0, CadenaOriginal.Length);
//Valido que este bien
return Firmador.VerifySignature(byteSello); 

}
Sin embargo con BouncyCastle el método "Firmador.Init(false, Cert.GetPublicKey());" no existe con esos parámetros
El método Init te pide en el segundo parámetro un objeto de tipo iCipherParameters que no se de donse sacar.
Uso BouncyCastle versión 1.7 para .NET

Saludos
ioriyagami
Mensajes: 10
Registrado: Mar Nov 02, 2010 6:08 pm

Re: Iniciando con un validador para la factura

Mensaje por ioriyagami »

Ok amigo creo que es tarde para contestar ja, bueno yo usé la 1.6 y ya verifiké hoy mismo en la 1.7.4114.6375 que sí funciona no se porque a ti no te esté funcionando bien. Chécalo bien!!.

Saludos y buen día.
Ya no había podido entrar al foro para seguir posteando debido al trabajo y pues si deja esto de la facturación electrónica :P
Saludos a DADO.
Cerrado