AESEncoder()
Syntax
Ergebnis$ = AESEncoder(*Eingabe, *Ausgabe, Groesse, *Schluessel, Bits, *InitialisierungsVektor [, Modus])Beschreibung
Kodiert den angegebenen '*Eingabe'-Puffer mit Hilfe des AES-Algorithmus in den '*Ausgabe'-Puffer. 'Bits' geben die Größe des für die Verschlüsselung verwendeten Schlüssels an. Gültige Werte sind 128, 192 und 256. 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). Seine Größe hängt vom Parameter 'Bits' ab: 16 Bytes für 128 Bit-Verschlüsselung, 24 Bytes für 196 Bit und 32 Bytes für 256 Bit.
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.
Der optionale Parameter 'Modus' 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 weniger stark als CBC macht.Beispiel: CBC
; Sollte im Ascii-Modus kompiliert werden ; String$ = "Hello this is a test for AES" *CipheredString = AllocateMemory(Len(String$)+1) ; Platz für den null-terminierten String *DecipheredString = AllocateMemory(Len(String$)+1) ; mit seiner abschließenden Null (ASCII-Modus) If AESEncoder(@String$, *CipheredString, Len(String$), ?Key, 128, ?InitializationVector) Debug "Ciphered: "+PeekS(*CipheredString) AESDecoder(*CipheredString, *DecipheredString, Len(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 EndDataSectionBeispiel: ECB
; Sollte im Ascii-Modus kompiliert werden ; String$ = "Hello this is a test for AES" *CipheredString = AllocateMemory(Len(String$)+1) ; Platz für den null-terminierten String *DecipheredString = AllocateMemory(Len(String$)+1) ; 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
Unterstützte OS
Alle