Hache les données avec l'algorithme spécifié
#include <Crypt.au3>
_Crypt_HashData ( $vData, $iAlgID [, $bFinal = True [, $hCryptHash = 0]] )
$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() |
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() |
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.
Recherchez CryptHashData dans la bibliothèque MSDN.
#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 Then ; 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