AESEncoder()

Syntaxe

Resultat = AESEncoder(*Entree, *Sortie, Taille, *Cle, Bits, *VecteurInitialisation [, Mode])
Description
Encode les données du tampon d'entrée en utilisant l'algorithme AES dans le tampon de sortie.

Arguments

*Entree Le tampon d'entrée avec les données en clair.
*Sortie Le tampon de sortie qui reçoit les données codées.
Il doit être différent du tampon d'entrée.
Taille Le nombre d'octets à encoder.
Au moins 16 octets sinon des données de rembourrage doivent être ajoutées dans le tampon d'entrée avant le codage, afin d'obtenir ces 16 octets minimum.
*Cle Un tampon contenant la clé de codage.
  Sa taille dépend du paramètre 'Bits': 
    l6 octets pour le cryptage 128 bits 
    24 octets pour le cryptage 192 bits
    32 octets pour le cryptage 256 bits
Bits La taille de la clé utilisée par le chiffrement.
Les valeurs valides sont 128, 192 et 256.
*VecteurInitialisation Est un bloc tampon de données aléatoires de 16 octets, utilisé pour initialiser le chiffrement afin d'empêcher toute violation de décodage (uniquement nécessaire si vous utilisez le mode #PB_Cipher_CBC).
Mode (optionnel)
  #PB_Cipher_CBC: Mode par défaut (Cipher Block Chaining). Besoin de '*VecteurInitialisation'.
                  Recommandé car plus sûr que le mode ECB.
  #PB_Cipher_ECB: Mode Alternatif (Electronic CodeBook). Pas besoin de '*VecteurInitialisation'
                  ni de chaînage(chaque bloc est codé indépendamment). Cryptage très faible comparé à CBC
                  et ne devrait pas être utilisé pour un cryptage sérieux.

Valeur de retour

Renvoie une valeur non nulle si l'encodage a réussie, zéro sinon.

Remarques

AES est un algorithme de chiffrement de l'industrie qui a un bon équilibre entre la vitesse et la sécurité. Voici l'introduction wikipedia sur AES: "En cryptographie, le Advanced Encryption Standard (AES) est une norme de cryptage adopté par le gouvernement des États-Unis. La norme comprend trois chiffrements par bloc, AES-128, AES-192 et AES-256. Chaque chiffrement AES a une taille de bloc de 128 bits, avec des tailles de clés de 128, 192 et 256 bits, respectivement. Les chiffrements AES ont été analysés de façon approfondie et sont maintenant utilisés dans le monde entier.

PureBasic utilise une mise en œuvre conforme à la RFC de l'AES. Plus d'informations peuvent être trouvées dans le RFC 3602 : http://www.ietf.org/rfc/rfc3602.txt.

Exemple: CBC

  ; Crypter une chaîne de caractères
  ;
  String$ = "Hello voici un test pour AES"
  
  StringMemorySize = StringByteLength(String$) + SizeOf(Character) ; Espace pour la chaîne et son caractère 'nul' de terminaison de chaîne
  *CipheredString = AllocateMemory(StringMemorySize)   
  *DecipheredString = AllocateMemory(StringMemorySize) 
  
  If AESEncoder(@String$, *CipheredString, StringByteLength(String$), ?Key, 128, ?InitializationVector)
    Debug "Codé : "+PeekS(*CipheredString) ; Attention, ça s'arrêtera sur le premier octet nul, uniquement à des fins de démonstration
    
    AESDecoder(*CipheredString, *DecipheredString, StringByteLength(String$), ?Key, 128, ?InitializationVector)
    Debug "Décodé : "+PeekS(*DecipheredString)
  EndIf

  DataSection
    Key:
      Data.b $06, $a9, $21, $40, $36, $b8, $a1, $5b, $51, $2e, $03, $d5, $34, $12, $00, $06
  
    InitializationVector:
      Data.b $3d, $af, $ba, $42, $9d, $9e, $b4, $30, $b4, $22, $da, $80, $2c, $9f, $ac, $41
  EndDataSection
  

Exemple: ECB

  String$ = "Hello voici un test pour AES"
  
  *CipheredString   = AllocateMemory(StringByteLength(String$) + SizeOf(Character)) ; Espace pour la chaîne de caractère
  *DecipheredString = AllocateMemory(StringByteLength(String$) + SizeOf(Character)) ; et le caractère nul de fin de chaîne
  
  If AESEncoder(@String$, *CipheredString, MemorySize(*CipheredString), ?Key, 128, 0, #PB_Cipher_ECB)
    Debug "Chiffré: " + PeekS(*CipheredString)
    
    AESDecoder(*CipheredString, *DecipheredString, MemorySize(*DecipheredString), ?Key, 128, 0, #PB_Cipher_ECB)
    Debug "Déchiffré: " + PeekS(*DecipheredString)
  EndIf
  
  DataSection
    Key:
    Data.a $06, $a9, $21, $40, $36, $b8, $a1, $5b, $51, $2e, $03, $d5, $34, $12, $00, $06
  EndDataSection
  

Voir aussi

AESDecoder(), StartAESCipher()

OS Supportés

Tous

<- AESDecoder() - Cipher Index - AddCipherBuffer() ->