Ver Mensaje Individual
  #2 (permalink)  
Antiguo 13/10/2011, 16:34
Avatar de MardanCorp
MardanCorp
 
Fecha de Ingreso: octubre-2011
Mensajes: 7
Antigüedad: 12 años, 6 meses
Puntos: 2
Respuesta: Facturación electrónica 2011. Codigo vb.net 2008

Imports System.IO
Imports OpenSSL.Crypto 'esto no lo he utilizado, pero creo q
Imports System
Imports System.Runtime.InteropServices
Imports System.Security.Cryptography
Imports System.Text
Imports System.Xml
Public Class Form1
Dim s As New metodo
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try

Dim horaFecha As String = ""
Dim año As String = ""
Dim mes As String = ""
Dim dia As String = ""
Dim hora As String = ""
Dim minuto As String = ""
Dim segundo As String = ""
año = Format(Date.Now.Year, "00")
mes = Format(Date.Now.Month, "00")
dia = Format(Date.Now.Day, "00")
hora = Format(Date.Now.Hour, "00")
minuto = Format(Date.Now.Minute, "00")
segundo = Format(Date.Now.Second, "00")
horaFecha = año & "-" & mes & "-" & dia & "T" & hora & ":" & minuto & ":" & segundo
'creamos una cadena original
Dim cadenaoriginal As String = "||3.0|2011-10-13T12:09:19|ingreso|Pago en una sola exhibición|161.2100|MXN|187.0000|DEMO000002FEL|Dem o2 FEL SA de CV|Insurgentes|45|San Federico|Benito Juarez|DF|Mexico|51200|Insurgentes|45|FJS9405196IA |Razon Social Random|calle|122|3-X|San Simon|G.A.M|Tultitlan|Distrito Federal|Mexico|52100|1.0000|Cosa para vender|100.0000|100.0000|25.7900||"

'A continuacion guardaremos la cadena en un archivo con su formato UTF-8 como lo pide SAT
System.IO.File.WriteAllText("D:\cadena.txt", cadenaoriginal)

'Creamos el proceso para invocar al openssl
'CREAMOS EL SHA1
Dim process As New Process
process.StartInfo.WindowStyle = ProcessWindowStyle.Minimized
process.StartInfo.FileName = "C:\OpenSSL\bin\openssl.exe" 'le ponemos el nombre del archivo q hara la encriptacion (la ruta del openssl.exe)
process.StartInfo.Arguments = "dgst -SHA1 d:\cadena.txt" 'le madamos solo un parametro. (el nombre del archivo .txt q contiene la cadena original)
process.StartInfo.WorkingDirectory = "C:\OpenSSL\bin" 'esto es para poner el direcctorio inicial en el q iniciara el proceso
process.StartInfo.UseShellExecute = False 'esto es para decirle q no usaremos el shell del sistema operativo
process.StartInfo.ErrorDialog = False 'esto es para omitir cualquier mensaje de error del proceso a ejecutar
process.StartInfo.RedirectStandardOutput = True 'esto es para decirle q vamos a escribir (o utiliar) el resultado de la secuencia (o sea el resultado encriptado)
process.Start() 'iniciamos el proceso
Dim codificado As String 'creamos una varaible q almacenara el resultado encriptado
codificado = process.StandardOutput.ReadToEnd 'el resultado del parametro "dgst -SHA1 d:\cadena.txt" se almacena en esta variable
process.WaitForExit() 'le decimos q se espere el proceso
'ahora, al resultado lo pasamos en un ciclo for para quitarle la
'parte del sha1 y q solo nos quede el resultado
Dim codificado2 As String = ""
For i As Integer = 0 To codificado.Length - 1
If codificado.Chars(i) = "=" Then
codificado2 = Mid(codificado, i + 3) 'seleccionamos desde la psicion en la q se quedo hasta al final de la cadena y eso se lo pasamos a codigificado2
End If
Next
System.IO.File.WriteAllText("D:\codificado.txt", codificado2) 'escribimos el resultado en otro archivo de texto

'CREAMOS EL ARCHIVO .KEY.PEN
Dim process2 As New Process
process2.StartInfo.WindowStyle = ProcessWindowStyle.Minimized
process2.StartInfo.FileName = "C:\OpenSSL\bin\openssl.exe" 'le ponemos el nombre del archivo q hara la encriptacion (la ruta del openssl.exe)
process2.StartInfo.Arguments = "pkcs8 -inform DER -in D:\Cer_Sellos\aaa010101aaa_CSD_01.key -passin pass:a0123456789 -out D:\Cer_Sellos\aaa010101aaa_CSD_01.key.pem" 'le madamos solo un parametro.
process2.StartInfo.WorkingDirectory = s.App_Path() 'esto es para poner el direcctorio inicial en el q iniciara el proceso
process2.StartInfo.UseShellExecute = False 'esto es para decirle q no usaremos el shell del sistema operativo
process2.StartInfo.ErrorDialog = False 'esto es para omitir cualquier mensaje de error del proceso a ejecutar
process2.StartInfo.RedirectStandardOutput = True 'esto es para decirle q vamos a escribir (o utiliar) el resultado de la secuencia (o sea el resultado encriptado)
process2.Start() 'iniciamos el proceso
process2.WaitForExit() 'le decimos q se espere el proceso

'CREAMOS EL SELLO
'C:\OpenSSL\bin>openssl dgst -sign D:\Cer_Sellos\aaa010101aaa_CSD_01.key.pem D:\codificado.txt | openssl enc -base64 -A > D:\sello.txt
Dim process3 As New Process
process3.StartInfo.WindowStyle = ProcessWindowStyle.Minimized
process3.StartInfo.FileName = "C:\OpenSSL\bin\openssl.exe" 'le ponemos el nombre del archivo q hara la encriptacion (la ruta del openssl.exe)
process3.StartInfo.Arguments = "dgst -sign D:\Cer_Sellos\aaa010101aaa_CSD_01.key.pem D:\codificado.txt" 'le madamos solo un parametro.
process3.StartInfo.WorkingDirectory = "C:\OpenSSL\bin" 'esto es para poner el direcctorio inicial en el q iniciara el proceso
process3.StartInfo.UseShellExecute = False 'esto es para decirle q no usaremos el shell del sistema operativo
process3.StartInfo.ErrorDialog = False 'esto es para omitir cualquier mensaje de error del proceso a ejecutar
process3.StartInfo.RedirectStandardOutput = True 'esto es para decirle q vamos a escribir (o utiliar) el resultado de la secuencia (o sea el resultado encriptado)

process3.Start() 'iniciamos el proceso

Dim SelloTxt As String 'creamos una varaible q almacenara el resultado encriptado
SelloTxt = process3.StandardOutput.ReadToEnd
Dim b64 As String = Convert.ToBase64String(Encoding.Default.GetBytes(S elloTxt)) 'decodificamos el resultado en base 64

process3.WaitForExit() 'le decimos q se espere el proceso
System.IO.File.WriteAllText("D:\sello.txt", b64) 'escribimos el resultado en otro archivo de texto
'CREAMOS EL CERTIFICADO .PEM (blahblahblahblah.CER.PEM)
'C:\OpenSSL\bin>openssl dgst -sign D:\Cer_Sellos\aaa010101aaa_CSD_01.key.pem D:\codificado.txt | openssl enc -base64 -A > D:\sello.txt
Dim process4 As New Process
process4.StartInfo.WindowStyle = ProcessWindowStyle.Minimized
process4.StartInfo.FileName = "C:\OpenSSL\bin\openssl.exe" 'le ponemos el nombre del archivo q hara la encriptacion (la ruta del openssl.exe)
process4.StartInfo.Arguments = " x509 -inform DER -outform PEM -in D:\Cer_Sellos\aaa010101aaa_CSD_01.cer -pubkey > D:\Cer_Sellos\aaa010101aaa_CSD_01.cer.pem " 'le madamos solo un parametro.
process4.StartInfo.WorkingDirectory = "C:\OpenSSL\bin" 'esto es para poner el direcctorio inicial en el q iniciara el proceso
process4.StartInfo.UseShellExecute = False 'esto es para decirle q no usaremos el shell del sistema operativo
process4.StartInfo.ErrorDialog = False 'esto es para omitir cualquier mensaje de error del proceso a ejecutar
process4.StartInfo.RedirectStandardOutput = True 'esto es para decirle q vamos a escribir (o utiliar) el resultado de la secuencia (o sea el resultado encriptado)

process4.Start() 'iniciamos el proceso

process4.WaitForExit() 'le decimos q se espere el proceso

'EXTRAEMOS LA CADENA DEL CERTIFICADO MIIE/TCCA+WgAwIBAgIUMzAwMDEwMDAwMDAxMDAwMDA4MDAwDQYJKoZ Ih ......
'C:\OpenSSL\bin>openssl.exe x509 -inform DER -outform PEM -in D:\Cer_Sellos\aaa010101aaa_CSD_01.cer
Dim process5 As New Process
process5.StartInfo.WindowStyle = ProcessWindowStyle.Minimized
process5.StartInfo.FileName = "C:\OpenSSL\bin\openssl.exe" 'le ponemos el nombre del archivo q hara la encriptacion (la ruta del openssl.exe)
process5.StartInfo.Arguments = "x509 -inform DER -outform PEM -in D:\Cer_Sellos\aaa010101aaa_CSD_01.cer" 'le madamos solo un parametro.
process5.StartInfo.WorkingDirectory = "C:\OpenSSL\bin" 'esto es para poner el direcctorio inicial en el q iniciara el proceso
process5.StartInfo.UseShellExecute = False 'esto es para decirle q no usaremos el shell del sistema operativo
process5.StartInfo.ErrorDialog = False 'esto es para omitir cualquier mensaje de error del proceso a ejecutar
process5.StartInfo.RedirectStandardOutput = True 'esto es para decirle q vamos a escribir (o utiliar) el resultado de la secuencia (o sea el resultado encriptado)




'hasta aqui son los datos "complicados" sigue el posts ...