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

VB 6 et antérieur Discussion :

[VB] CryptoAPI


Sujet :

VB 6 et antérieur

  1. #1
    Membre du Club Avatar de am.adnane
    Inscrit en
    Février 2004
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 85
    Points : 56
    Points
    56
    Par défaut [VB] CryptoAPI
    j'ai pu rsoudre mon prob d cryptoAPI
    si vous etes intéressez voila le code pour crypter une chaine avec un mot passe.al'aide des fcts de cryptoAPI.

    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
    '-----------------------------------Fonction CryptoAPI-------------*---------------------------
    Declare Function CryptAcquireContext Lib "advapi32.dll" Alias "CryptAcquireContextA" (ByRef phProv As Long, ByVal pszContainer As String, ByVal pszProvider As String, ByVal dwProvType As Long, ByVal dwFlags As Long) As Long
    Declare Function CryptCreateHash Lib "advapi32.dll" (ByVal hProv As Long, ByVal algid As Long, ByVal hkey As Long, ByVal dwFlags As Long, ByRef phHash As Long) As Long
    Declare Function CryptHashData Lib "advapi32.dll" (ByVal hhash As Long, ByVal pbData As String, ByVal dwDataLen As Long, ByVal dwFlags As Long) As Long
    Declare Function CryptDeriveKey Lib "advapi32.dll" (ByVal hProv As Long, ByVal algid As Long, ByVal hBaseData As Long, ByVal dwFlags As Long, ByRef phKey As Long) As Long
    Declare Function CryptDestroyKey Lib "advapi32.dll" (ByVal hkey As Long) As Long
    Declare Function CryptDestroyHash Lib "advapi32.dll" (ByVal hhash As Long) As Long
    Declare Function CryptEncrypt Lib "advapi32.dll" (ByVal hkey As Long, ByVal hhash As Long, ByVal Final As Long, ByVal dwFlags As Long, ByVal pbData As String, ByRef pdwDataLen As Long, ByVal dwBufLen As Long) As Long
    Declare Function CryptDecrypt Lib "advapi32.dll" (ByVal hkey As Long, ByVal hhash As Long, ByVal Final As Long, ByVal dwFlags As Long, ByVal pbData As String, ByRef pdwDataLen As Long) As Long
    '-------------------------------------Variables et constantes-------------------------------------------------
    'Type algorithme
    Const ALG_TYPE_ANY      As Long = 0
    Const ALG_TYPE_BLOCK    As Long = 1536
    'classe algorithme
    Const ALG_CLASS_DATA_ENCRYPT  As Long = 24576
    Const ALG_CLASS_HASH    As Long = 32768
    ' Hash IDs
    Const ALG_SID_SHA1      As Long = 4
    Const ALG_SID_RC2       As Long = 2
    'algo de hash
    Const CALG_SHA1         As Long = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_SHA1
    Const CALG_RC2          As Long = ALG_CLASS_DATA_ENCRYPT Or ALG_TYPE_BLOCK Or ALG_SID_RC2
    Const PROV_RSA_FULL  As Long = 1
    Dim m_strInputData          As String
    Dim m_lngCryptContext       As Long
    'Microsoft provider
    Const MS_PROVIDER  As String = "Microsoft Base Cryptographic Provider v1.0"
    '-------------------------------------------Fonction Encrypt-----------------------------------------------
     Function Encrypt(s As String, psw As String) As String
    Dim lngHashHwd      As Long     ' Hash handle
    Dim lngkey         As Long
    Dim lngRetCode      As Long     ' return value from an API call
    Dim lngHExchgKey    As Long
    Dim strOutputData   As String
    Dim lngEnctBuffLen  As Long
    Dim strEncBuffer  As String
    Dim lngEncDataLength As Long
    Dim strTemp As String
    strTemp = vbNullChar
    'obtenir le handle de CSP spécifié------------------------------------------------------------------------
    If Not CBool(CryptAcquireContext(m_lngCryptContext, strTemp, MS_PROVIDER, PROV_RSA_FULL, 0)) Then
     
        MsgBox "Error  en CryptAcuireContext()...!!!"
     
    End If
    'Permet d'obtenir un handle qui sera utilisé pour effectuer un hash sur un flux de données------------------
    If Not CBool(CryptCreateHash(m_lngCryptContext, CALG_SHA1, 0, 0, lngHashHwd)) Then
     
          MsgBox "Erreur en CryptCreateHash()...!!!"
     
    End If
    'Hash les données spécifiées (psw) par l'objet spécifié par le handle------------------------------------------
    If Not CBool(CryptHashData(lngHashHwd, psw, Len(psw), 0)) Then
     
           MsgBox "Error en CryptHashData()...!!!"
    End If
     
    'Génère une clé de session dérivée à partir de données de base-----------------------------------------------
    If Not CBool(CryptDeriveKey(m_lngCryptContext, CALG_RC2, lngHashHwd, 0, lngkey)) Then
     
              MsgBox "Error en DeriveKey()...!!!"
    End If
     
    'alouer l'espace suffisant
    lngEncDataLength = Len(s)
    lngEnctBuffLen = lngEncDataLength * 2
    strEncBuffer = String$(lngEnctBuffLen, vbNullChar)
    LSet strEncBuffer = s    'LSet stringvar = string 'aligner a gauche la chaine s
     
    'Crypter les doneés (Chaine s)--------------------------------------------------------------------------------
    If Not CBool(CryptEncrypt(lngkey, 0, 1, 0, strEncBuffer, lngEncDataLength, lngEnctBuffLen)) Then
     
        MsgBox "Error en CryptEncrypt()...!!!"
     
    End If
            strOutputData = Mid$(strEncBuffer, 1, lngEncDataLength)
            Encrypt = strOutputData 'la chiane est Cryptée
     
      ' --------------------Libèré les handle de clé-----------------------
        If lngkey <> 0 Then
            lngRetCode = CryptDestroyKey(lngkey)
        End If
     
        If lngHashHnd <> 0 Then
            lngRetCode = CryptDestroyHash(lngHashHwd)
        End If
     
     
        '----------------------------- Vider les variables-----------------------------------
     
        lngHashHwd = 0
        psw = String$(250, 0)
        'ingkey = 0
     
    End Function
    ]
    pour le plus ample information di le moi
    je vai vous détaillez..!
    Merci
    ==> ==>

  2. #2
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Points : 733
    Points
    733
    Par défaut
    lngkey est défini par toi ou comme j'en ai l'impression dans le code? Suivant quels criteres?

    Quelle est la procédure pour décrypter le code?
    N'oubliez pas de mettre le

  3. #3
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    une chaine avec un mot passe
    un mot de passe, Vesta, ne se décrypte en général pas....
    Le mot proposé par l'utilisateur est crypté et le résultat est simplement comparé avec un résultat attendu... (pas de décryptement, donc...)

    Edit : j'ai déjà eu l'occasion de dire que, pour les mots de passe, on choisissait même et surtout un procédé de cryptement irréversible (et pour cause...). Celà permet de ne pas cacher le mot de passe sous sa forme attendue. Et dès lors : ou le fichier et ce mot existent et une comparaison est faite avec succès et tout continue, ou au contraire ils n'existent pas ou la comparaison est faite sans succès et l'utilisateur est "éjecté"

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Points : 733
    Points
    733
    Par défaut
    Ok donc on compare la chaine cryptée a une valeur attendue c'est bien ca? De telle sorte a ne pas garder en 'dur' la valeur attendue?

    J'ai déja pu remarqué lors d'une petite decouverte du monde du cracking, hacking que ce genre de variables en "dur" etait trop facilement trouvable
    N'oubliez pas de mettre le

  5. #5
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Tu n'as manifestement rien (mais alors vraiment rien) compris, Vesta...
    Relis tout

  6. #6
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Points : 733
    Points
    733
    Par défaut
    Citation Envoyé par jmfmarques
    Le mot proposé par l'utilisateur est crypté
    Mot = Le mot de passe?

    Aide moi jmfmarques si je n'ai rien compris je voudrais bien comprendre lol
    N'oubliez pas de mettre le

  7. #7
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Est-ce vraiment difficile de comprendre que ce qui est en dur n'est pas le mot frappé par l'utilisateur mais le résultat (irréversible) de son cryptement ?
    Et est-ce vraiment difficile de comprendre que la comparaison se fait entre le cryptement du mot entré et le résultat que l'on devrait obtenir si c'était le bon mot ?

    Est-ce également inimaginable qu'à un moment ou l'autre, sous une forme ou l'autre, il va bien falloir écrire quelque chose en dur quelque part (fichier ou base de registre = enregistrement de quelque chose en dur quelque part !)

  8. #8
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Points : 733
    Points
    733
    Par défaut
    Non mais alors j'avais bien compris ou alors je ne saisis pas la notion 'Dur'

    Donc ce que l'urilisateur tape est crypté, dans var1.


    Ensuite on compare var1 à ce qui est enregistré qq part c ca que moi je comprend.
    Le code est stocké mais crypté.
    N'oubliez pas de mettre le

  9. #9
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Euréka !

  10. #10
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Points : 733
    Points
    733
    Par défaut
    N'oubliez pas de mettre le

  11. #11
    Membre du Club Avatar de am.adnane
    Inscrit en
    Février 2004
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 85
    Points : 56
    Points
    56
    Par défaut
    c'est une juste une simulation de cryptage (mais ce programme doit se reactifier pour qu'il doi entre un client/serveur).
    je pe vous envoyer le code source si vous voulez avec la documentation(rapport).
    ==> ==>

Discussions similaires

  1. [VB6]CryptoAPI pour MD5
    Par julio84 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 15/09/2006, 15h47
  2. CryptoApi sur pocket PC
    Par n8ken dans le forum Visual C++
    Réponses: 2
    Dernier message: 21/07/2006, 10h26
  3. [VB]Cryptographie (CryptoAPI) ??? CryptoKci.dll????
    Par am.adnane dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 09/03/2006, 11h17
  4. [VB6]Cryptographie[CryptoAPI]
    Par am.adnane dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/01/2006, 18h35
  5. Win32 - CryptoApi - DecryptMessage
    Par BlackGoddess dans le forum Windows
    Réponses: 1
    Dernier message: 28/09/2005, 23h24

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