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 Gibt den Eingabepuffer mit den reinen Daten an. *Ausgabe Gibt den Ausgabepuffer an, welcher die kodierten Daten empfängt. Dieser muss ein anderer als der Eingabepuffer sein. Größe Gibt die Anzahl an zu kodierenden Bytes an. Dies müssen mindestens 16 Bytes sein. Um etwas Kleineres zu verschlüsseln, müssen Leerzeichen vor dem Kodieren hinzugefügt werden. *Schlüssel Gibt einen Puffer an, welcher den Schlüssel für das Kodieren enthält. Seine Größe hängt vom Parameter 'Bits' ab: l6 Bytes für 128 Bit-Verschlüsselung, 24 Bytes für 192 Bit und 32 Bytes für 256 Bit. Bits Gibt die Größe des für die Verschlüsselung verwendeten Schlüssels an. 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). 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. Modus (optional) 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.
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
; 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
EndDataSection
Beispiel: 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
Siehe auch
AESDecoder(), StartAESCipher()
Unterstützte OS
Alle