IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Macros et VBA Excel Discussion :

enregistre le mot de passe dans une cellule ou dans la base de registre


Sujet :

Macros et VBA Excel

  1. #1
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut enregistre le mot de passe dans une cellule ou dans la base de registre
    bonjour a tous

    Toujours dans le cadre du maileur 2016/2017 version publique

    sondage:

    préfèreriez vous :
    1° enregistrer un mot de passe dans la base de registre
    sachant que dans la base de registre seul le PC dans le quel a été enregistré le mot de passe pourra utiliser le fichier

    2°dans une cellule
    si le fichier voyage le risque de sécurité est plus grand

    merci pour les retours
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour Patrick,
    La base de registre pourquoi pas, mais tu limites la portabilité de l'application et si l'utilisateur n'a pas les droits administrateur...

    Dans une cellule du fichier, autant données le code!


    Non , définir dans le code un clé de cryptage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Clé ="Cosmopolite"
    Password ="123456789"
    I2=0
    For i =1 to len(Password)
    I2=I2+1
    If I2>len(clé) then I2=1
      t=t & chr(asc(mid(Password,i,1))-asc(mid(Clé,I2,1)))
    Next
    La tu peux écrire le password dans un cellule!

    http://www.developpez.net/forums/d13...l/#post7453253

  3. #3
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 417
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 417
    Points : 16 260
    Points
    16 260
    Par défaut
    Bonjour

    Pour ma part, je le mets souvent dans une cellule d'un onglet veryHidden et je nomme la cellule avec un nom pas explicite.
    Dans la mesure où j'utilise pas mal de plage nommées, le nom est noyé dans la masse et sa valeur n'est pas affichée.
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Petite précision,la valeur absolue de A - B va donner chr(1)

    La valeur absolue de Chr(1) - B va donner A!

    La clé de cryptage personnalise le résultat et interdit la lecture du password en claire dans une cellule!

    Maintenant tu peux en plus de verrouiller vba masquer la cellule de résultat et brider l'accès à l'onglet.

    On le sait il n'y aura rien de vraiment protégé mais dissuasif oui!

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    - s'il s'agit d'un mot de passe qui doit être utilisé dans une autre application (programme tiers appelé) : une inputbox et laisser l'utilisateur donner ce mot de passe, puisqu'il sera contrôlé par le programme appelé
    - s'il s'agit d'un mot de passe nécessaire à la continuation du code de l'appli elle-même, aucune des solutions proposées ne sera viable et sérieuse si l'on ne sait pas mettre en oeuvre un mécanisme empêchant sans faille l'accès au code du classeur utilisé. Il suffira en effet à l'utilisateur malveillant ou mal intentionné de "shunter" l'expression conditionnelle écrite.
    Le shunt le plus connu est de type :
    amitiés
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour a tous

    @rdurupt

    portabilité ok mais sécurité en moins

    le maileur sans les adresse mail et MDP pourront fonctionner partout

    actuellement les adresse émetteur sont enregistrées dans les cellules


    les mots de passe sont écrit a la main mais ne sont nécessaires que pour GMAIL (avec le smtp FAI) pas besoins de MDP)

    ton astuce de cryptage est réversible non? Sachant que si on regarde le code on peut faire le décryptage surtout que protéger le projet avec un MDP n'est pas vraiment efficace

    mon soucis c'est que si le fichier est utiliser frauduleusement par un autre utilisateur qui ne correspondant pas a l'utilisateur dans le sheets acceuil il aura toute les données

    tandis qu'enregistrer dans regedit par vba dans hkroot qui autorise les inscriptions même en mode invité (non administrateur) (j'ai fait le test!!!)sécuriserait un max en cas de perte du fichier

    ou au min le faire dans un fichier ".ini" dans le pc

    cela n'empêche pas que si utilisation du fichier sur divers pc on peut toujours taper l'adresse émetteur et MDP a la main dans les textboxs

    je vais tester ton cryptage ca m'intéresse pour une autre app excel que j'avais faite
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par unparia Voir le message
    Bonjour
    - s'il s'agit d'un mot de passe qui doit être utilisé dans une autre application (programme tiers appelé) : une inputbox et laisser l'utilisateur donner ce mot de passe, puisqu'il sera contrôlé par le programme appelé
    - s'il s'agit d'un mot de passe nécessaire à la continuation du code de l'appli elle-même, aucune des solutions proposées ne sera viable et sérieuse si l'on ne sait pas mettre en oeuvre un mécanisme empêchant sans faille l'accès au code du classeur utilisé. Il suffira en effet à l'utilisateur malveillant ou mal intentionné de "shunter" l'expression conditionnelle écrite.
    Le shunt le plus connu est de type :
    amitiés
    c'est pour cela que je posait la question
    car enregistrer les mdp voir même adresse mail émetteur dans un fichier externe".ini" ou dans la base de registre utilisateur série "HKroot" me semble le plus sécurisé

    rien n'empêche de prendre le même fichier et le faire fonctionner sur un autre pc :il faudra refaire la même opération c'est tout
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Invité
    Invité(e)
    Par défaut
    Personnellement dans une de mes application, mais la on est en Vb.net j'utilise une dll.

    J'utilise une bases de données SqlLite dans laquelle ce trouve les informations pour me connecter à une bases de données Sql Server.

    Les informations ont un cryptage bien défi et chaque utilisateur doivent ce connecté à sqllite et disposent de leurs propres système d cryptage.

    Pour connaitre la clé de décryptage de la licence je récupère des informations de la machine SsId Numéro de série du disque dur,etc.. Et ça me permet de récupérer le informations originelles de la connexion Sql Server.

    Ainsi les informations sur le l'adresse mail,serveur smtp le password sont crypter en fonction de l'emplacement de sauvegarde du fichier Sqllite , et les informations de décryptage en fonction d la machine, nom d domaine,Etc ... De la machine de l'utilisateur!

    En d'autres terme le processus de décryptage est lui même crypter en de la machine utilisatrice!

    J'ai 15 machine qui fonctionne sur ce principe. Le mode opératoire d'attribution de licence en ses limitations sont définis dans le cryptage de base.


    Si tu replace le fichier Sqllite sur un autre disque dur ça ne marche plus.

    Si tu ouvre la base de données les tables et les champs son en md5 et le texte en Champollion!

    Tu peux encapsulées ton code de cryptage dans un dll Vb6.

    http://www.developpez.net/forums/d15...l/#post8711676
    Dernière modification par Invité ; 14/08/2016 à 15h02.

  9. #9
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t=t & chr(asc(mid(Password,i,1))-asc(mid(Clé,I2,1)))
    plante chr() si résultat négatif.
    Utiliser Xor évite cet inconvénient, brouille mieux et est réversible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
        Clé = "Cosmopolite"
        Password = "123456789"
        ' Password = "r]@YZFXTP" 'pw codé à décoder
        I2 = 0
        For i = 1 To Len(Password)
            I2 = I2 + 1
            If I2 > Len(Clé) Then I2 = 1
            t = t & Chr(Asc(Mid(Password, i, 1)) Xor Asc(Mid(Clé, I2, 1)))
        Next
    End Sub
    Il y a aussi la possibilité des noms cachés pour le stocker dans le classeur.
    eric

  10. #10
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    J'insiste donc : rien de tout cela ne protège d'un shunt (que le mot et sa vérification se fassent ou non à l'aide d'un fichier externe), si l'accès au code n'est pas rendu inaccessible de manière infaillible.
    VBA n'est pas facilement "protégeable".
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function Cryptage(Clé As String, PassWord As String) As String
    Dim I As Long, I2 As Long
    For I = 1 To Len(PassWord)
    I2 = I2 + 1: If I2 > Len(Clé) Then I2 = 1
    Cryptage = Cryptage & Chr(Abs(Asc(Mid(PassWord, I, 1)) - Asc(Mid(Clé, I2, 1))))
    Next
    End Function
     
    Sub test()
    Debug.Print Cryptage("Convergence", Cryptage("Convergence", "1234567890"))
    Debug.Print Cryptage("Cosmopolite", Cryptage("Cosmopolite", "123456789"))
    Debug.Print Cryptage("Infrastructure", Cryptage("Infrastructure", "123456789"))
    End Sub
    Si tu panache avec le Md5 donné dans le lien!

    Citation Envoyé par unparia Voir le message
    J'insiste donc : rien de tout cela ne protège d'un shunt (que le mot et sa vérification se fassent ou non à l'aide d'un fichier externe), si l'accès au code n'est pas rendu inaccessible de manière infaillible.
    VBA n'est pas facilement "protégeable".
    c'est un sujet récurant avec lequel j’adhère complètement ; sauf un web service ou une dll....................
    Dernière modification par Invité ; 14/08/2016 à 16h01.

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    c'est un sujet récurant avec lequel j’adhère complètement ; sauf un web service ou une dll....................
    re ou tout simplement un fichier ini résidant dans le pc
    se sera donc un ".ini"
    merci a tous
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  13. #13
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    @eriiic
    Il y a aussi la possibilité des noms cachés pour le stocker dans le classeur.
    kézako ca????
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  14. #14
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Il suffit de mettre sa propriété .visible à False :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Names("nom_caché").Visible = False
    Il n'apparait plus dans le gestionnaire de nom. Ca saute moins aux yeux qu'une feuille xlveryhidden.

  15. #15
    Invité
    Invité(e)
    Par défaut
    le MD5 est un hacheur sur 13 caractères, il est irréversible pas possible de le décrypter!

    tu demande à l'utilisateur un PassWord par exemple "Cosmopolite" comme dans l'exemple! tu le Hache avec MD5 et tu le sauvegarde dans Excel. il peut être lisible ça n'apporte rien. quand le PassWord est sauvegardé en MD5 et que l'utilisateur rouvre l'application il faut qu'il se relog, il tape son PassWord on le passe dans MD5 et on le valide en le comparant avec celui présent dans l'onglet param. si c'est Ok on sauvegarde "Cosmopolite" dans la variable public Clé. ainsi tout peut être visible même le code puisque la clé ("Cosmopolite") n’apprêtait nul part!

    pour le reste on conserve la fonction Cryptage pour sauvegarder l'adresse Mail le Port le passWord(idéalement différant de la Clé public) Smtp ETC... dans Excel!
    Dernière modification par Invité ; 14/08/2016 à 17h47.

  16. #16
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    ainsi tout peut être visible même le code puisque la clé ("Cosmopolite") n’apprêtait nul part!
    Le problème n'est pas à ce niveau, mais à celui-ci
    si c'est Ok on sauvegarde "Cosmopolite" dans la variable public Clé.
    C'est là (à ce point là : celui de l'expression conditionnelle) qu'on "shunte", dans le code-même. Et peu importe alors la validité du mot de passe (on ne s'en préoccupe même pas).
    Voilà voilà ...
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  17. #17
    Invité
    Invité(e)
    Par défaut
    Ok mais sauf avoir de mauvaise intention (arnaque à l'assurance), je ne vois pas l'intérêt de cambrioler sa propre maison, puisque le décryptage dépend de la validité du mot de passe qu'il n'est pas possible de contourner!
    Citation Envoyé par rdurupt
    ainsi tout peut être visible même le code puisque la clé ("Cosmopolite") n’apprêtait nul part!

    Quand je dis on sauvegarde "Cosmopolite" je veux dire que c'est ce que l'utilisateur doit saisir au clavier ou autre en tous les cas le mot de passe qu'il a lui-même défini plus haut. Je n'en vois pas l'intérêt si non!

    Comme je l'ai dis la clé n'apparaît nulle part dans le code!

    Et ne me dis pas qu'il peut saisir autre chose, j'en suis conscient mais dans ce cas il ne décryptera pas!

    Et peu importe alors la validité du mot de passe (on ne s'en préoccupe même
    Si tu ne connais pas le mot de passe pas de décryptage!

    Redéfinir une autre clé aurait pour finalité que de recrypter les informations et les rendraient inexploitables!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print Cryptage("Infrastructure", Cryptage("Convergence", "123456789"))
    Tu n'as pas besoin de protégé le Vba tu peux même mettre un point d'arrêt dans le code. Si tu ne connais pas la clé de décryptage du ne décrypteras pas les informations!

    En soi le codage Md5 ne présent aucun intérêt il est là pour brouiller les pistes, c'est une information pour dire vrai/faut.

    Mais le fait que tu le force à vrai en debug ne le rend pas valide pour autant!

    Maintenant si tu verrouilles le projet, que tu masquer l'onglet etc... Tu orientes sur une fausse piste car en réalité tu peux tout laisser visible sans que ton code soit vulnérable.

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
    Option Explicit
        'Définition des constantes utiles pour la fonction Crypter et deCrypter (Clé et nombre d'itérations de la fonction maximum)
     
     
    Function Crypter(ByRef Clef As String, ByVal chaîneACrypter As String)
    '---------------------------------------------------------------------------------------
    ' Procedure : Crypter
    ' Créée le  : lundi 18 juil 2005 18:51
    ' Auteur    : Maxence HUBICHE
    ' Site      : http://mhubiche.developpez.com
    ' Objet     : Crypter la chaîne chaîneACrypter en fonction d'une clef et de la méthode
    '               de Vigenère
    '---------------------------------------------------------------------------------------
    '
        Const NBROTATIONSMAX    As Long = 4
        Dim sLettres    As String
        Dim lCompteur   As Long
        Dim lLongueur   As Long
        Dim lBoucle     As Long
     
     
        'Définition de la longueur de la chaîne à crypter et de la chaîne de résultat
        lLongueur = Len(chaîneACrypter)
        sLettres = String(lLongueur, Chr(0))
    'Trucs de codage
    'Vous ne le saviez peut-être pas, mais, lorsque vous écrivez ceci :
    'Dim s As String
    's = "A"
    's = s & "B"
    'Vous utilisez énormément de ressources système (enfin ... tout est relatif) car, il y a création de la variable s pour stocker "A", puis pour ajouter le "B", il va falloir que le système recrée une variable contenant les 2 caractères ; alors que si on avait écrit ceci :
    's = "xx"
    'Mid(s, 1, 1) = "A"
    'Mid(s, 2, 1) = "B"
    'nous utilisons toujours la même variable, et nous la modifions au fur et à mesure qu'on modifie la position d'un caractère. Cette deuxième écriture demande donc moins de traitements au procésseur et est donc plus rapide au niveau traitement. C'est donc la solution que j'ai favorisé dans le code de la fonction.
     
     
        'Boucler en fonction du nombre de rotations attendues
        For lBoucle = 1 To NBROTATIONSMAX
            'boucler pour chaque caractère de la chaîne initiale
            For lCompteur = 1 To lLongueur
                'Remplacer le caractère de la chaîne à crypter par le caractère correspondant à
                '   le reste de
                '       la valeur ascii du caractère à crypter
                '       plus
                '       la valeur ascii du caractère correspondant dans la clé, multiplié par la longueur de la clé
                '   quand on le divise par 256
                Mid(sLettres, lCompteur, 1) = Chr((Asc(Mid(chaîneACrypter, lCompteur, 1)) + _
                        (Asc(Mid(Clef, (lCompteur Mod Len(Clef)) + 1, 1)) * lLongueur)) Mod 256)
            'recommencer
            Next
            'réaffecter la chaîne à crypter par le résultat trouvé pour pouvoir recommencer une itération
            chaîneACrypter = sLettres
        'Nouvelle itération
        Next
        'Renvoyer le résultat final
        Crypter = sLettres
    End Function
     
    Function deCrypter(ByRef Clef As String, ByVal chaîneAdeCrypter As String)
    '---------------------------------------------------------------------------------------
    ' Procedure : deCrypter
    ' Créée le  : jeudi 8 septembre 2005
    ' Auteur    : Muhad'hib (d'aprés Maxence HUBICHE)
    ' Site      :
    ' Objet     : deCrypter la chaîne chaîneAdeCrypter en fonction d'une clef et de la méthode
    '               de Vigenère
    '---------------------------------------------------------------------------------------
    '
        Dim sLettres    As String
        Dim lCompteur   As Long
        Dim lLongueur   As Long
        Dim lBoucle     As Long
        Const NBROTATIONSMAX    As Long = 4
     
        'Définition de la longueur de la chaîne à crypter et de la chaîne de résultat
        lLongueur = Len(chaîneAdeCrypter)
        sLettres = String(lLongueur, Chr(0))
     
     
        'Boucler en fonction du nombre de rotations attendues
        For lBoucle = 1 To NBROTATIONSMAX
            'boucler pour chaque caractère de la chaîne initiale
            For lCompteur = 1 To lLongueur
                'Remplacer le caractère de la chaîne à crypter par le caractère correspondant à
                '   le reste de
                '       la valeur ascii du caractère à crypter
                '       plus
                '       la valeur ascii du caractère correspondant dans la clé, multiplié par la longueur de la clé
                '   quand on le divise par 256
                Dim reste As Integer
                reste = Asc(Mid(chaîneAdeCrypter, lCompteur, 1))
     
     
     
     
     
                Mid(sLettres, lCompteur, 1) = Chr((((Asc(Mid(chaîneAdeCrypter, lCompteur, 1)) - _
                        (Asc(Mid(Clef, (lCompteur Mod Len(Clef)) + 1, 1)) * lLongueur)) Mod 256) + 256) Mod 256)
            'recommencer
            Next
            'réaffecter la chaîne à crypter par le résultat trouvé pour pouvoir recommencer une itération
            chaîneAdeCrypter = sLettres
        'Nouvelle itération
        Next
        'Renvoyer le résultat final
        deCrypter = sLettres
    End Function
     
    Sub t()
    Debug.Print deCrypter("Cosmopolite", Crypter("Cosmopolite", "AZERTYUIOP123456789"))
    End Sub
    En conclusion il est possible de sauvegarder les informations confidentiel dans un fichier Excel en les cryptant, et de les publier sur un espace réseau sans qu'elles soient accessible aux commun des mortel!

    Dans la version proposé par.Maxence HUBICHE, le cryptage est plus complexe et nécessite une fonction d décryptage.

    Il est possible de définir un niveau de cryptage (NBROTATIONSMAX) ainsi chaque caractères est crypté plusieurs fois. 4 niveau me parais largement suffisant. Ainsi si je crypte 4 fois je dois décrypter 4 fois. Il me faut connaitre la clé de cryptage mais également le niveau de cryptage!
    Dernière modification par AlainTech ; 20/08/2016 à 12h01. Motif: Fusion de 2 messages

  18. #18
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Désolé d'insister, mais il y a une énorme différence entre :
    -1) cacher (par chiffrement, quel qu'il soit) une chaîne de caractères
    et
    -2) subordonner l'exécution de lignes de code à une expression conditionnelle (laquelle peut être shuntée, que la chaîne soit ou non celle attendue)

    Je l'ai dit plus haut et le répète donc

    S'il s'agit d'un mot de passe à utiliser dans une application tierce appelée : aucun problème (cette application tierce gèrera la validité elle-même. Laisser l'utilisateur saisir son mot de passe)
    S'il s'agit au contraire de subordonner la continuation de l'appli en cours à un test de validité de mot de passe, c'est cette expression conditionnelle (CELLE-LA) qui sera shuntée (remplacée par exemple par un simple If True Then ... dans le code ... juste après le code de "vérification", quelle que soit la valeur retournée par ce code de vérification) sauf si le code est infailliblement inaccessible et donc non modifiable.
    Il est très difficile d'accéder (et la modifier) à une ligne de code de VB6, par exemple. La chose est malheureusement un million de fois moins difficile avec VBA/Excel.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  19. #19
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut


    Bonjour !

    Je confirme, en dehors de la protection efficace à l'ouverture du classeur depuis la version 2013,
    un mot de passe crypté via un algorithme "XOR" est difficilement déchiffrable
    mais la protection du code VBA étant bien illusoire …


    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  20. #20
    Invité
    Invité(e)
    Par défaut
    Qu'est-ce que tu me fais unparia, le mot de passe est crypté, soit en md5 donc irrécupérable, soit par la fonction de cryptage et n'apparaitrait pas dans le code vba!


    Même avec le vba visible et les valeurs cryptées dans une cellule Excel pas possible de pirater!

    Nous sommes tous d'accord et je suis le premier le dire qu'il est illusoire d'imaginer protéger son code efficacement.

    En l'espèce, il n'ait pas question de tester mais de fournir au smtp les informations dont il a besoin.

    Si je voulais protégé mon code j'utiliserai un fonction externe en vbscript qui lui peut être crypter et exécute via le Shell.

    Et même là, bien que le décryptage est très compliqué et l'algorithme difficilement trouvable....

    Depuis sa dernière version , VbsFactory ne propose plus le décrypteur, mais j'imagine qu'il doit être possible de trouver.

    Regarde VbsFactory.

    Mais la demande était sur la protection du password pas du code!

    Marc aide moi ils sont devenus fous!
    Dernière modification par Invité ; 18/08/2016 à 17h30.

Discussions similaires

  1. [XL-2010] Copier coller la valeur d'une cellule active dans une cellule bien définie
    Par franckb74 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/10/2015, 09h16
  2. Réponses: 0
    Dernier message: 10/06/2014, 19h11
  3. Réponses: 6
    Dernier message: 20/05/2008, 12h57
  4. Réponses: 1
    Dernier message: 15/01/2007, 18h32
  5. Réponses: 1
    Dernier message: 11/09/2006, 10h14

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