Usuario
Proyecto Chileano - verificar una firma

Debate general
-
Hola,
Trato de intender un proyecto para verificar una firma sobre un archivo XML, en qué la documentación esta disponible aquí , pero me encuentro problemas para comprender lo qué debo hacer.
Investigué y encontré un codigo vb a trabajar en este proyecto pero no es gratis, pero encontré un ejemplo de archivo xml generado y me gustaría trabajar en este ejemplo.
En mi código vb, he considerado este ejemplo de codigo XML enviado por el servicio de los impuestos :
<AUTORIZACION> <CAF version="1.0"> <DA> <RE>97975000-5</RE> <RS>RUT DE PRUEBA</RS> <TD>33</TD> <RNG> <D>1</D> <H>200</H> </RNG> <FA>2003-09-04</FA> <RSAPK> <M>0a4O6Kbx8Qj3K4iWSP4w7KneZYeJ+g/prihYtIEolKt3cykSxl1zO8vSXu397QhTmsX7SBEudTUx++2zDXBhZw==</M> <E>Aw==</E> </RSAPK> <IDK>100</IDK> </DA> <FRMA algoritmo="SHA1withRSA">g1AQX0sy8NJugX52k2hTJEZAE9Cuul6pqYBdFxj1N17umW7zG/hAavCALKByHzdYAfZ3LhGTXCai5zNxOo4lDQ==</FRMA> </CAF> <RSASK>contenido de la llave privada</RSASK> <RSAPUBK>contenido de la llave publica</RSAPUBK> </AUTORIZACION>
Y en mi código vb, he hecho eso, para tratar de verificar la firma :
Dim local_modulus_string As String = "0a4O6Kbx8Qj3K4iWSP4w7KneZYeJ+g/prihYtIEolKt3cykSxl1zO8vSXu397QhTmsX7SBEudTUx++2zDXBhZw==" Dim local_exponente_string As String = "Aw==" Dim local_signature_string As String = "g1AQX0sy8NJugX52k2hTJEZAE9Cuul6pqYBdFxj1N17umW7zG/hAavCALKByHzdYAfZ3LhGTXCai5zNxOo4lDQ==" Dim local_idk As String = "100" Dim local_modulus_bytes() As Byte = System.Convert.FromBase64String(local_modulus_string) Dim local_exponente_bytes() As Byte = System.Convert.FromBase64String(local_exponente_string) Dim local_signature_bytes() As Byte = System.Convert.FromBase64String(local_signature_string) Dim local_length_idk As Integer = local_idk.Length Dim l_nb_elem As Integer = local_signature_bytes.Length Dim l_reste(l_nb_elem - 1) As Byte Dim l_message As String = "" Dim l_messageString As String = "" For i = 0 To l_nb_elem - 1 l_reste(i) = Math.Pow(local_signature_bytes(i), local_exponente_bytes(0)) Mod local_modulus_bytes(i) l_message = l_message & l_reste(i).ToString Next Dim l_pos As Integer = 1 While l_pos <= l_message.Length l_messageString = l_messageString & ChrW(Microsoft.VisualBasic.Mid(l_message, l_pos, local_length_idk - 1)) l_pos = l_pos + local_length_idk - 1 End While
Pero no sé como comparar este resulto con el "hash value", pues no existe en el archivo xml enviado del servicio de los impuestos. Gracias- Tipo cambiado Enrique M. Montejo jueves, 1 de enero de 2015 8:54
- Cambiado Enrique M. Montejo lunes, 4 de junio de 2018 5:10 Debate relacionada con web services.
Todas las respuestas
-
-
-
Hola Amigos, yo estoy con la misma duda.
Pero según lo que he podido investicar y ver, es que antes de todo hay que saber que el SII utiliza el metodo de firma denominado con "CLAVE PUBLICA" o Algoritmo Asimetrico. ( https://es.wikipedia.org/wiki/Criptograf%C3%ADa_asim%C3%A9trica ).
Teniendo claro como funciona eso, es que el SII utiliza dos certificados para validar la valides de un documento electronico. El 100.cer y 300.cer que son un par de llaves publicas (certificacion y produccion respectivamente) usar para validar una firma.
He estado trabando en esto ( https://social.msdn.microsoft.com/Forums/es-ES/e0bf9ca3-559f-48dc-a0b5-be792f7312e1/cmo-verificar-valides-de-una-firma-sha1withrsa?forum=vcses)
pero me he estancado en la validacion del documento. Ya he tengo todos los parametros que se suponen son necesarios para validar. Pero no se a que funcion pasar los para validar.
He usaso VerifyHash y VerifyData de RSACryptoServiceProvider sin resultados satisfactorios. Siempre me da la verificacion Erronea alguien que sepa como validar correctamente.
Saludos!!