Auteur de questions
Projet Chilien - gestion de plusieurs signatures

Question
-
Bonjour,
j'ai un projet que j'aimerais pouvoir travailler, mais je rencontre des soucis pour comprendre ce qui doit être fait, et le peux de chose que je comprend, je ne sais pas vraiment comment s'y prendre.
Je comprends qu'on reçoit un fichier XML, dans lequel on trouve une clé, dite "clé publique du contribuable", qui est composée d'un "modulus" et d'un "exponente", que l'on doit utiliser pour vérifier une signature, mais je ne comprend pas comment comment, la valeur du digest n'est pas présent. On obtient aussi une soi disant "clé publique d'identification" mais je ne comprend pas son rôle, elle est composée que d'un caractère numérique.
Ce même fichier xml est accompagnée d'une clé publique et d'une clé privée RSA, afin qu'on puisse générer une signature, mais là aussi, je ne sais pas comment faire cela.
La manuel expliquant ce projet est disponible ici (en espangnol), j'ai traduit ce document, le lien en français est disponible ici
Pour faire ce projet, j'ai cependant trouvé un code déjà tout fait, en vb et en c# mais il utilise une librairie payante et j'aimerais voir s'il serait possible de le faire avec des librairies gratuites seulement, voir le lien
Serait-il possible d'avoir de l'aide pour faire ce projet que je trouve assez compliqué?
Merci
- Modifié SquallFF8 vendredi 12 décembre 2014 14:56
Toutes les réponses
-
Je comprends que dans un premier temps, je reçois ce bout de code XML:
<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>contenu de la clé privée</RSASK> <RSAPUBK>contenu de la clé public</RSAPUBK> </AUTORIZACION>
Afin de vérifier la signature, j'ai mis ce bout de code :
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_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 l_taille As Integer = local_signature_bytes.Length Dim l_reste(l_taille - 1) As Byte Dim l_message As String = "" Dim l_message2 As String = "" For i = 0 To l_taille - 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_message2 = l_message2 & ChrW(Microsoft.VisualBasic.Mid(l_message, l_pos, 2)) l_pos = l_pos + 2 End While
et problème, je ne sais pas quoi faire avec cette valeur qui a été fournie :
<IDK>100</IDK>
Comment dois-je m'y prendre?
Merci
-
-
Mon code n'a pas beaucoup changé, j'ai mis cela désormais:
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
Mais je ne sais pas quoi faire de plus. Merci