Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2011
    Messages : 17
    Points : 10
    Points
    10

    Par défaut Adaptation d'une fonction C++ en VBScript

    Bonjour à toutes et à tous,

    Pour bien planter le tableau, je commence par le fait que je ne connais pas grand chose au VBScript et que je suis plus à l'aise dans le monde C++.

    Pour un besoin ponctuel (export de données d'une base SQLServer vers une base PostGres, avec quelques modifications apportées aux données au passage), on me demande de développer un module VBScript réalisant cette opération (exigence client).

    L'une des données concernées est un mot de passe qui est crypté et stockée sous SQLServer dans un champ de type varbinary(15).
    Ce mot de passe doit être décrypté dans le module VBScript pour être stocké en clair dans la base PostGres (rassurez-vous, ce n'est que temporaire, l'identification des utilisateurs se fera par un autre biais).

    Dans notre application C++, nous avons un module qui se charge de ça.
    Je dois donc le transférer dans le module VBScript pour y décrypter les mots de passe.

    Mais je n'arrive pas à adapter mon code!

    Voici le code C++ en question :
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    void CProfil::TransformerPwd(LPSTR pPwd)
    {
    	// Cette méthode transforme un mot de passe en effectuant un OU EXCLUSIF
    	// avec une "clé magique".
    	// L'opération est réversible puisque le mot de passe transformé peut être
    	// rétabli en clair par un 2ème appel de la méthode.
    	// Attention ! la méthode modifie DIRECTEMENT la donnée située à l'adresse pPwd;
    	// donc utiliser un buffer dans la méthode appelante et non une CString.
     
    	// La clé de codage des mots de passe. NE DOIT PAS ETRE MODIFIEE.
    	static char BASED_CODE CleMagique[] = "$:;[9-*|#]=%/?.";	// 15 cars
     
    	int Lg = strlen(pPwd);
     
    	LPCSTR pCle = CleMagique;
     
    	for (int i = 0; i < Lg; i++)
    	{
    		*pPwd ^= *pCle;		// OU EXCLUSIF entre mot de passe et "clé magique"
    		pCle++;
    		pPwd++;
    	}
    }

    Quelqu'un peut-il m'aider à adapter ce code en VBScript (j'ai bien sûr modifié la clé de codage)?

    D'avance, merci!

  2. #2
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    juillet 2009
    Messages
    2 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2009
    Messages : 2 087
    Points : 4 820
    Points
    4 820

    Par défaut

    En me basant sur ton algorithme, j'ai pu construire cette fonction que j'espère fonctionnelle pour ton besoin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Option Explicit
     
    Dim CleMagique, Test
    Function TransformerPwd(pPwd)
        Dim  Lg, pCle, I, Result, Temp
        CleMagique = "$:;[9-*|#]=%/?."
        pCle = CleMagique
        Lg = Len(pPwd)
        For I = 1 To Lg ': On Error Resume Next
           Temp = Asc(Mid(pPwd, I, 1)) XOR  Asc(Mid(pCle, I, 1))
           Result = Result & Chr(Temp)
        Next
        TransformerPwd = Result
    End Function
    ' Exemple d'utilisation avec le mot de passe:  5hC,*/6\4:M8PSN 
    Test = TransformerPwd("5hC,*/6\4:M8PSN")
    MsgBox "Resultat de la transformation : " & Test & vbNewLine & "Rétablissement du mot de passe : " & TransformerPwd(Test)
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA)
    Vous pouvez consulter mes contributions
    Consultez les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr ICI

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2011
    Messages : 17
    Points : 10
    Points
    10

    Par défaut

    Bonjour l_autodidacte,

    Merci pour ta réponse et ta fonction.
    Malheureusement, ça ne fonctionne pas, mais je pense que ton code n'est pas en cause.

    En effet, la valeur retourner par Asc(Mid(pPwd, I, 1)) est systématiquement 63!
    J'ai l'impression que c'est la récupération de la donnée qui pose problème (pour rappel, le type du champ dans la base de données SQLServer où sont stockées les mots de passes est de type varbinary)

    Voici mon bout de code en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim PwdDecode
     
            MyRecordsetSQLServer.Open "MaProcStock", MyConnectionSQLServer
    	If MyRecordsetSQLServer.EOF Then
    		MsgBox "Aucune donnée disponible"
    	Else
    		Do While NOT MyRecordsetSQLServer.Eof
    			PwdDecode= TransformerPwd(MyRecordsetSQLServer("UT_MDP1"))
    			MsgBox PwdDecode
     
    			MyRecordsetSQLServer.MoveNext
    		Loop
    	End If
    Encore merci à ceux qui pourront m'apporter de l'aide!

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2011
    Messages : 17
    Points : 10
    Points
    10

    Par défaut

    Ca y est, j'ai trouvé la solution à mon problème!
    J'ai modifié la fonction pour travailler en binaire, ce qui donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function TransformerPwd(pPwd)
        Dim  Lg, pCle, I, Result, Temp
        CleMagique = "$:;[9-*|#]=%/?."
        pCle = CleMagique
        Lg = LenB(pPwd)
        For I = 1 To Lg ': On Error Resume Next
           Temp = AscB(MidB(pPwd, I, 1)) XOR  Asc(Mid(pCle, I, 1))
           Result = Result & Chr(Temp)
        Next
        TransformerPwd = Result
    End Function
    Un grand merci l_autodidacte pour ton aide!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 29/03/2009, 05h48
  2. Appleler une fonction VBScript avec parametre dans un batch
    Par spoun95 dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 10/10/2008, 17h08
  3. Adaptation d'une procédure en fonction
    Par dasdeb dans le forum Débuter
    Réponses: 0
    Dernier message: 03/03/2008, 18h09
  4. Réponses: 4
    Dernier message: 21/09/2007, 15h14
  5. Réponses: 2
    Dernier message: 13/03/2007, 15h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo