UDF > Crypt >


_Crypt_HashData

Hache les données avec l'algorithme spécifié

#include <Crypt.au3>
_Crypt_HashData ( $vData, $iAlgID [, $bFinal = True [, $hCryptHash = 0]] )

Paramètres

$vData Données à hacher
$iAlgID ID de hashage à utiliser. Voir _Crypt_DeriveKey().
$bFinal [optionnel] False si c'est seulement un segment de données complet, et fait que la fonction retourne un objet de hachage au lieu d'un hachage
$hCryptHash [optionnel] Objet de hachage retourné par un précédent appel à _Crypt_HashData()

Valeur de retour

Succès: Retourne un hachage binaire ou un objet de hachage si $bFinal = False.
Échec: Définit @error <> 0.
@error: 10 - Impossible de créer l'objet de hachage
20 - Impossible de hacher les données
30 - Impossible d'obtenir la taille de hachage
40 - Impossible d'obtenir le hachage
1000+ Erreur dans _Crypt_Startup()

Remarque

La synthèse de hachage (hash digest) sera retournée comme une chaîne binaire, la taille est spécifiée par l'algorithme.
Pour utiliser ceci avec des segments de données, mettez le flag $bFinal à False pour tous les segments non finaux et utilisez l'objet de hachage retourné avec tous les appels ultérieurs.

En relation

_Crypt_HashFile

Voir aussi

Recherchez CryptHashData dans la bibliothèque MSDN.

Exemple

#include <ComboConstants.au3>
#include <Crypt.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StringConstants.au3>
#include <WinAPIConv.au3>
#include <WindowsConstants.au3>

Global $g_iAlgorithm = $CALG_SHA1, $g_idInputEdit = -1, $g_idOutputEdit = -1

Example()

Func Example()
    Local $hGUI = GUICreate("Hachage en temps réel", 400, 320)
    $g_idInputEdit = GUICtrlCreateEdit("", 0, 0, 400, 150, $ES_WANTRETURN)
    $g_idOutputEdit = GUICtrlCreateEdit("", 0, 150, 400, 150, $ES_READONLY)
    Local $idCombo = GUICtrlCreateCombo("", 0, 300, 100, 20, $CBS_DROPDOWNLIST)
    GUICtrlSetData($idCombo, "MD2 (128bit)|MD4 (128bit)|MD5 (128bit)|SHA1 (160bit)|SHA_256|SHA_384|SHA_512", "SHA1 (160bit)")
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
    GUISetState(@SW_SHOW, $hGUI)

    _Crypt_Startup() ; Exécute la bibliothèque crypt pour optimiser les performances.

    Local $dHash = 0, $sRead = "", $iMsg = GUIGetMsg()

    While $iMsg <> $GUI_EVENT_CLOSE
        If $iMsg = $idCombo ; Vérifie si le combobox est sélectionné et récupère le bon algorithme.
            Switch GUICtrlRead($idCombo) ; Lit la sélection du combobox.
                Case "MD2 (128bit)"
                    $g_iAlgorithm = $CALG_MD2

                Case "MD4 (128bit)"
                    $g_iAlgorithm = $CALG_MD4

                Case "MD5 (128bit)"
                    $g_iAlgorithm = $CALG_MD5

                Case "SHA1 (160bit)"
                    $g_iAlgorithm = $CALG_SHA1

                Case  "SHA_256"
                    $g_iAlgorithm = $CALG_SHA_256

                Case "SHA_384"
                    $g_iAlgorithm = $CALG_SHA_384

                Case "SHA_512"
                    $g_iAlgorithm = $CALG_SHA_512

            EndSwitch

            $sRead = GUICtrlRead($g_idInputEdit)
            If StringStripWS($sRead, $STR_STRIPALL) <> "" Then ; Vérifie qu'il y a du texte à hacher.
                $dHash = _Crypt_HashData($sRead, $g_iAlgorithm) ; Crée un hachage du texte entré.
                GUICtrlSetData($g_idOutputEdit, $dHash) ; Définit la boîte de dialogue de sortie avec les données de hachage.
            EndIf
        EndIf

        $iMsg = GUIGetMsg()
    WEnd

    GUIDelete($hGUI) ; Supprime la GUI précédente et tous ses contrôles.
    _Crypt_Shutdown() ; Arrête la bibliothèque crypt.
EndFunc   ;==>Example

Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg, $lParam

    If _WinAPI_LoWord($wParam) = $g_idInputEdit Then
        If _WinAPI_HiWord($wParam) = $EN_CHANGE Then
            Local $dHash = _Crypt_HashData(GUICtrlRead($g_idInputEdit), $g_iAlgorithm) ; Crée un hachage du texte entré.
            GUICtrlSetData($g_idOutputEdit, $dHash) ; Définit la boîte de dialogue de sortie avec les données de hachage.
        EndIf
    EndIf
EndFunc   ;==>WM_COMMAND