UDF > Crypt >


_Crypt_EncryptData

Chiffre les données à l'aide de la clé fournie

#include <Crypt.au3>
_Crypt_EncryptData ( $vData, $vCryptKey, $iAlgID [, $bFinal = True] )

Paramètres

$vData Données à chiffrer/déchiffrer
$vCryptKey Mot de passe ou handle d'une clé si le flag CALG_USERKEY est spécifié
$iAlgID L'algorithme à utiliser
$bFinal [optionnel] False si c'est seulement un segment de données complet

Valeur de retour

Succès: Retourne une chaîne binaire contenant les données chiffrées.
Échec: Retourne -1 et définit @error <> 0.
@error: 50 - Impossible de déterminer la mémoire tampon
60 - Impossible de chiffrer les données
10 to 30 - Ne peut créer la clé
80 - Impossible de récupérer $CALG_USERKEY AlgID
1000+ Erreur dans _Crypt_Startup()

Remarque

Retourne une chaîne binaire quel que soit l'entrée

Si $vData contient des caractères non ANSI il doit être passé comme StringToBinary(..., $SB_UTF8). Voir Exemple 3.

En relation

_Crypt_DecryptData, _Crypt_DeriveKey, _Crypt_EncryptFile

Voir aussi

Recherchez CryptEncrypt dans la bibliothèque MSDN.

Exemple

Exemple 1

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

Global $g_hKey = -1, $g_idInputEdit = -1, $g_idOutputEdit = -1, $g_idOutputDeCrypted = -1

Example()

Func Example()
    Local $hGUI = GUICreate("Realtime (En/DE)cryption", 400, 470)
    $g_idInputEdit = GUICtrlCreateEdit("", 0, 0, 400, 150, $ES_WANTRETURN)
    $g_idOutputEdit = GUICtrlCreateEdit("", 0, 150, 400, 150, $ES_READONLY)
    $g_idOutputDeCrypted = GUICtrlCreateEdit("", 0, 300, 400, 150, $ES_READONLY)
    Local $idCombo = GUICtrlCreateCombo("", 0, 450, 100, 20, $CBS_DROPDOWNLIST)
    GUICtrlSetData($idCombo, "3DES (168bit)|AES (128bit)|AES (192bit)|AES (256bit)|DES (56bit)|RC2 (128bit)|RC4 (128bit)", "RC4 (128bit)")
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
    GUISetState(@SW_SHOW, $hGUI)

    _Crypt_Startup() ; Pour optimiser les performances, démarre la librarie crypt.

    Local $iAlgorithm = $CALG_RC4
    $g_hKey = _Crypt_DeriveKey(StringToBinary("CryptPassword"), $iAlgorithm) ; Déclare un mot de passe et l'algorithme pour créer une clé cryptographique.
    Local $iMsg = GUIGetMsg()

    While $iMsg <> $GUI_EVENT_CLOSE
        If $iMsg = $idCombo Then ; Teste si la combobox est sélectionnée et récupère l'algorithme correct.
            Switch GUICtrlRead($idCombo) ; Lit la sélection de la combobox.
                Case "3DES (168bit)"
                    $iAlgorithm = $CALG_3DES

                Case "AES (128bit)"
                    $iAlgorithm = $CALG_AES_128

                Case "AES (192bit)"
                    $iAlgorithm = $CALG_AES_192

                Case "AES (256bit)"
                    $iAlgorithm = $CALG_AES_256

                Case "DES (56bit)"
                    $iAlgorithm = $CALG_DES

                Case "RC2 (128bit)"
                    $iAlgorithm = $CALG_RC2

                Case "RC4 (128bit)"
                    $iAlgorithm = $CALG_RC4

            EndSwitch

            _Crypt_DestroyKey($g_hKey) ; Détruit la clé cryptographique.
            $g_hKey = _Crypt_DeriveKey(StringToBinary("CryptPassword"), $iAlgorithm) ; Re-déclare un mot de passe et l'algorithme pour créer une nouvelle clé cryptographique.

            Local $sRead = GUICtrlRead($g_idInputEdit)
            If StringStripWS($sRead, $STR_STRIPALL) <> "" Then ; Teste s'il y a du texte disponible à chiffrer.
                Local $dEncrypted = _Crypt_EncryptData($sRead, $g_hKey, $CALG_USERKEY) ; Chiffre le texte avec la nouvelle clé cryptographique.
                GUICtrlSetData($g_idOutputEdit, $dEncrypted) ; Définit la boîte de sortie avec le texte chiffré.
                Local $dDecrypted = _Crypt_DecryptData($dEncrypted, $g_hKey, $CALG_USERKEY) ; Déchiffre le texte avec la nouvelle clé cryptographique.
                GUICtrlSetData($g_idOutputDeCrypted, BinaryToString($dDecrypted)) ; Définit la boîte de sortie avec le texte chiffré.
            EndIf
        EndIf

        $iMsg = GUIGetMsg()
    WEnd

    GUIDelete($hGUI) ; Supprime la GUI et tous ses contrôles.
    _Crypt_DestroyKey($g_hKey) ; Détruit la clé cryptographique.
    _Crypt_Shutdown() ; Arrête la librairie 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 $dEncrypted = _Crypt_EncryptData(GUICtrlRead($g_idInputEdit), $g_hKey, $CALG_USERKEY) ; Chiffre le texte avec la clé cryptographique.
            GUICtrlSetData($g_idOutputEdit, $dEncrypted) ; Définit la boîte de sortie avec le texte chiffré.
            Local $dDecrypted = _Crypt_DecryptData($dEncrypted, $g_hKey, $CALG_USERKEY) ; Déchiffre le texte avec la nouvelle clé cryptographique.
            GUICtrlSetData($g_idOutputDeCrypted, BinaryToString($dDecrypted)) ; Définit la boîte de sortie avec le texte chiffréé.
        EndIf
    EndIf
EndFunc   ;==>WM_COMMAND


Exemple 2

#include <Crypt.au3>
#include <MsgBoxConstants.au3>

Example()

Func Example()
    ; Chiffre du texte en utilisant un mot de passe générique.
    Local $dEncrypted = StringEncrypt(True, 'Encrypt this data.', 'securepassword')

    ; Affiche le texte chiffré.
    MsgBox($MB_SYSTEMMODAL, 'Chiffré', $dEncrypted)

    ; Déchiffre le texte chiffré en utilisant le mot de passe générique.
    Local $sDecrypted = StringEncrypt(False, $dEncrypted, 'securepassword')

    ; Affiche le texte déchiffré.
    MsgBox($MB_SYSTEMMODAL, 'Déchiffré', $sDecrypted)
EndFunc   ;==>Example

Func StringEncrypt($bEncrypt, $sData, $sPassword)
    _Crypt_Startup() ; Démarre la librairie Crypt.
    Local $vReturn = ''
    If $bEncrypt Then ; Si le flag est défini à True alors chiffre, sinon déchiffre.
        $vReturn = _Crypt_EncryptData($sData, $sPassword, $CALG_RC4)
    Else
        $vReturn = BinaryToString(_Crypt_DecryptData($sData, $sPassword, $CALG_RC4))
    EndIf
    _Crypt_Shutdown() ; Arrête la librairie Crypt.
    Return $vReturn
EndFunc   ;==>StringEncrypt

Exemple 3

; Exemple pour traiter une chaîne non ANSI

#include <Crypt.au3>
#include <MsgBoxConstants.au3>
#include <StringConstants.au3>

Local $sPlaintext = "Hello! ជំរាបសួរ! Allô! Привет! 您好!مرحبا! હેલો! שלום! こんにちは!"

Local $dPlaintextUTF8 = StringToBinary($sPlaintext, $SB_UTF8) ; Convertit en chaîne Binary en  convertissant les caractères Unicode en UTF8
;~ $dPlaintextUTF8 = $sPlaintext ; Si décommenté, montrera pourquoi la conversion UTF8 est nécessaire

Local $iAlgorithm = $CALG_3DES
Local $g_hKey = _Crypt_DeriveKey("CryptPassword", $iAlgorithm)

Local $dEncrypted = _Crypt_EncryptData($dPlaintextUTF8, $g_hKey, $CALG_USERKEY) ; Chiffre le texte avec la nouvelle clé cryptographique.

Local $dDecrypted = _Crypt_DecryptData($dEncrypted, $g_hKey, $CALG_USERKEY) ; Déchiffre les données en utilisant la chaîne de mot de passe générique. La valeur retournée est une chaîne  binaire.

Local $sDecrypted = BinaryToString($dDecrypted, $SB_UTF8) ; Convertit la chaîne binaire en utilisant BinaryToString pour afficher les données initiales encryptées.

If $sPlaintext = $sDecrypted Then
    MsgBox($MB_SYSTEMMODAL, "Données déchiffrées", $sDecrypted)
Else
    MsgBox($MB_SYSTEMMODAL, "Données déchiffrées mauvaises", $sPlaintext & @CRLF & "-->" & @CRLF & $sDecrypted)
EndIf