AESEncoder()

Syntax

Ergebnis = AESEncoder(*Eingabe, *Ausgabe, Größe, *Schlüssel, Bits, *InitialisierungsVektor [, Modus])
Beschreibung
Kodiert den angegebenen Eingabepuffer mit Hilfe des AES-Algorithmus in den Ausgabepuffer.

Parameter

*Eingabe Der Eingabepuffer mit den reinen Daten.
*Ausgabe Der Ausgabepuffer, welcher die kodierten Daten empfängt. Dieser muss ein anderer als der Eingabepuffer sein.
Größe Die Anzahl an zu kodierenden Bytes. Dies müssen mindestens 16 Bytes sein. Um etwas Kleineres zu verschlüsseln, müssen Leerzeichen vor dem Kodieren hinzugefügt werden.
*Schlüssel Ein Puffer, welcher den Schlüssel für das Kodieren enthält. Seine Größe hängt vom Parameter 'Bits' ab: 16 Bytes für 128 Bit-Verschlüsselung, 24 Bytes für 192 Bit und 32 Bytes für 256 Bit.
Bits Die Größe des für die Verschlüsselung verwendeten Schlüssels. Gültige Werte sind 128, 192 und 256.
*InitialisierungsVektor Der InitialisierungsVektor ist ein zufälliger Datenblock, welcher für das Initialisieren der Verschlüsselung verwendet wird, um ein Knacken beim Dekodieren zu verhindern (wird nur bei Verwendung des #PB_Cipher_CBC Modus benötigt). Der InitialisierungsVektor ist immer 16 Bytes lang.
Modus (optional) Dies kann einer der folgenden Werte sein:
  #PB_Cipher_CBC: Standard-Modus der Kodierung (Cipher Block Chaining). Benötigt einen '*InitialisierungsVektor'.
                  Empfohlen als sicherer gegenüber dem ECB-Modus.
  #PB_Cipher_ECB: Alternativer Modus (Electronic CodeBook). Verwendet weder einen Zufallswert noch Verkettung
                  (jeder Block wird unabhängig voneinander kodiert), was ihn sehr schwach im Vergleich zu CBC macht,
                  weshalb er nicht für ernsthafte Verschlüsselung verwendet werden sollte.

Rückgabewert

Gibt einen Wert ungleich Null zurück, wenn die Verschlüsselung erfolgreich war, andernfalls Null.

Anmerkungen

AES ist ein industrieller Verschlüsselungs-Algorithmus und ist gut ausgewogen zwischen Geschwindigkeit und Sicherheit. Hier die (englische) Wikipedia-Einführung über AES: 'In cryptography, the Advanced Encryption Standard (AES) is an encryption standard adopted by the U.S. government. The standard comprises three block ciphers, AES-128, AES-192 and AES-256, adopted from a larger collection originally published as Rijndael. Each AES cipher has a 128-bit block size, with key sizes of 128, 192 and 256-bit, respectively. The AES ciphers have been analyzed extensively and are now used worldwide.'

PureBasic verwendet eine RFC-konforme Implementierung von AES. Weitere Informationen sind zu finden in der RFC 3602: http://www.ietf.org/rfc/rfc3602.txt.

Beispiel: CBC

  ; Verschlüsseln eines Strings
  ;
  String$ = "Hello this is a test for AES"
  
  StringMemorySize = StringByteLength(String$) + SizeOf(Character) ; Platz für den null-terminierten String mit seiner abschließenden Null
  *CipheredString = AllocateMemory(StringMemorySize)   
  *DecipheredString = AllocateMemory(StringMemorySize) 
  
  If AESEncoder(@String$, *CipheredString, StringByteLength(String$), ?Key, 128, ?InitializationVector)
    Debug "Ciphered: "+PeekS(*CipheredString) ; Warning: wird beim ersten Null-Byte angehalten, nur für Demo-Zwecke
    
    AESDecoder(*CipheredString, *DecipheredString, StringByteLength(String$), ?Key, 128, ?InitializationVector)
    Debug "Deciphered: "+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
  

Beispiel: ECB

  ; Sollte im Ascii-Modus kompiliert werden
  ;
  String$ = "Hello this is a test for AES"
  
  *CipheredString   = AllocateMemory(Len(String$) + SizeOf(Character)) ; Platz für den null-terminierten String
  *DecipheredString = AllocateMemory(Len(String$) + SizeOf(Character)) ; mit seiner abschließenden Null (ASCII-Modus)
  
  If AESEncoder(@String$, *CipheredString, Len(String$), ?Key, 128, 0, #PB_Cipher_ECB)
    Debug "Ciphered: "+PeekS(*CipheredString)
    
    AESDecoder(*CipheredString, *DecipheredString, Len(String$), ?Key, 128, 0, #PB_Cipher_ECB)
    Debug "Deciphered: "+PeekS(*DecipheredString)
  EndIf

  DataSection
    Key:
      Data.b $06, $a9, $21, $40, $36, $b8, $a1, $5b, $51, $2e, $03, $d5, $34, $12, $00, $06
  EndDataSection
  

Siehe auch

AESDecoder(), StartAESCipher()

Unterstützte OS

Alle

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