bueno antes que nada saludos a todos los colegas que han dejado su material para el tema de facturacion electronica del cual de por si hay muy poca informacion disponible me he visto en la necesidad de crear este nuevo tema porque al parecer este año entro en rigor una nueva modalidad de la factura electronica los nuevos cambios los pueden buscar en la pagina de hacienda en la Modificación al Anexo 20 de la Resolución Miscelánea Fiscal para 2010 la cual para la gente que ya se topo con que sus sellos son inválidos cambia la digestion MD5 por SHA1 inicialmente hice mi facturacion con visual basic 6 con lo cual tube dolores de cabeza al tener que codificar a utf-8 lo cual hice con el siguiente codigo
Function CodificarUTF8(s)
Dim i
Dim c
i = 1
Do While i <= Len(s)
c = Asc(Mid(s, i, 1))
If c >= &H80 Then
s = Left(s, i - 1) + Chr(&HC2 + ((c And &H40) / &H40)) + Chr(c And &HBF) + Mid(s, i + 1)
i = i + 1
End If
i = i + 1
Loop
CodificarUTF8 = s
End Function
despues de generar la cadena original que ya deben saber como se hace si no pues en este link lo encuentran http://www.sat.gob.mx/sitio_internet/e_sat/comprobantes_fiscales/15_6543.html
declare un string
Dim cadenaoriginal As String
y la codificacion se haria de la siguiente manera
cadenaoriginal = CodificarUTF8(cadenaoriginal)
despues segun el modo habitual era pasar la cadena por una digestion sha1 lo cual se haria de la siguiente forma primero hay que guardar la cadena original en un archivo
Open "c:\certificados\cadena.txt" For Output As #1
Print #1, cadenaoriginal
Close #1
ya teniendo el archivo de texto cadena.txt podemos usar openssl para encriptarlo para lo cual utilice archivos.bat para ejecutar las rutinas de la consola (cmd)
Open "H:\certificados\cfd.bat" For Output As #2
Dim digestion As String
digestion = "H:\OpenSSL\bin\openssl.exe dgst -sha1 H:\certificados\Cadena.txt>H:\certificados\sha1.tx t"
Print #2, digestion
ub = "H:\certificados\cfd.bat"
Close #2
y ejecutamos el programa con un shell
programa = Shell("H:\certificados\cfd.bat", vbNormalFocus)
ahora tenemos nuestra cadena original encriptada en el archivo sha1.txt el cual se almacenaria con un formato parecido a este
SHA1(h:\cer\cadenaoriginal.txt)= 17cfff4aed23d4f8976f906fbfba073d3c57b102
para el siguiente paso debemos borrar los siguientes caracteres de este archivo
SHA1(c:\certificados\cadenaoriginal.txt)=
personalmente lo hice abriendolo y almacenandolo en una cadena despues usando la funcion mid le dije cuantos caracteres quitar pero ya sabran ustedes como quieran hacerlo
ahora bien segun el anexo 20 de la reforma fiscal dice que debemos pasar la llave privada por una encriptacion RSA la cual con openssl se puede hacer por medio de la instruccion pkcs8
Open "c:\certificados\genpem.bat" For Output As #1
generarpem = "c:\openssl\bin\openssl.exe pkcs8 -inform DER -in c:\certificados\aqui_el_nombre_de_su_clave.key -passin pass:GRA0608157P1 -out c:\certificados\aqui_el_nombre_de_su_clave.key.pem "
Print #1, generarpem
Close #1
y de la misma manera que la rutina anterior se ejecutaria con un shell