none
Projet Chilien - gestion de plusieurs signatures RRS feed

  • 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
    vendredi 12 décembre 2014 11:07

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

    lundi 15 décembre 2014 11:03
  • Personne pour m'aider?
    jeudi 18 décembre 2014 10:02
  • 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

    dimanche 28 décembre 2014 17:28