Scheint ja keiner was dazu zu wissen war meine Formulierung des Problems so schlecht oder hat sich damit noch keiner beschäftigt ich denke ja mal nicht das ich der einzige bin der die AES Befehle verwendet. Um das jetzt noch mal aufzugreifen die Hilfe besagt ja wie schon geschrieben folgendes:
'*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.
Da zumindest meinen Information nach AES normal immer eine Blocklänge von 128 Bit hat und damit einen InitialisierungsVektor von 16 Byte verwendet wofür auch spricht dass die Daten zum verschlüsseln mindestens 16 Byte also 128 Bit haben müssen habe ich das mit den verschiedenen Längen des InitialisierungsVektor jetzt noch mal getestet.
Der InitialisierungsVektor dient ja dazu dass die verschlüsselten Daten selbst bei gleichem Passwort immer anders sind. Folgender Quellcode erstellt nun drei Speicherbereiche 16, 24, 32 Byte groß die die entsprechende Anzahl Bytes des InitialisierungsVektor enthalten und zeigt an was das Ergebnis ist wenn er zum Verschlüsseln von Daten bei einer Schlüssellänge von 256 Bit also 32 Byte verwendet wird da Pure Basic für Schlüssellänge und InitialisierungsVektor laut Hilfe den gleichen Parameter 'Bits' verwendet müsste nun also auch ein 32 Byte InitialisierungsVektor genutzt werden. Wie der Quellcode zeigt ändert sich aber der verschlüsselte Datenblock nicht egal ob nur 16 Byte oder die laut Hilfe nötigen 32 Byte übergeben werden was dafür spricht das alle weiteren Bytes ab dem 16. Byte Ignoriert werden.
Kann das jemand bestätigen oder einen Fehler in dem Beispielcode finden an dem das liegt denn da ich die AES befehle in einem meiner aktuellen Projekte nutzte will ich da keinen Fehler drin haben und falls es wirklich ein Fehler in der Hilfe ist sollte er ja behoben werden um zukünftig nicht mehr andere zu irritieren.
Code: Alles auswählen
EnableExplicit
Define *IV32, *IV24, *IV16
OpenCryptRandom()
*IV32 = AllocateMemory( 32 )
*IV24 = AllocateMemory( 24 )
*IV16 = AllocateMemory( 16 )
CryptRandomData( *IV32, 32 )
CopyMemory( *IV32, *IV24, 24 )
CopyMemory( *IV32, *IV16, 16 )
CloseCryptRandom()
Define String$ = "Hello this is a test for AES"
Define Key$ = "1234"
Key$ = MD5Fingerprint( @Key$, StringByteLength( Key$ ) )
Define *SourceString = AllocateMemory( Len( String$ ) + 1 )
Define *CipheredString = AllocateMemory( Len( String$ ) + 1 )
Define *DecipheredString = AllocateMemory( Len( String$ ) + 1 )
PokeS( *SourceString, String$, Len( String$ ), #PB_Ascii )
Debug PeekS( *SourceString )
Debug "----------------"
;- IV32
Debug "IV 32 Byte"
AESEncoder( *SourceString, *CipheredString, Len( String$ ), @Key$, 256, *IV32, #PB_Cipher_CBC )
Debug "IV 32 Ciphered: "+PeekS( *CipheredString )
AESDecoder( *CipheredString, *DecipheredString, Len(String$), @Key$, 256, *IV32, #PB_Cipher_CBC )
Debug "IV 32 Deciphered: "+PeekS( *DecipheredString )
Debug "----------------"
;- IV24
Debug "IV 24 Byte"
AESEncoder( *SourceString, *CipheredString, Len( String$ ), @Key$, 256, *IV24, #PB_Cipher_CBC )
Debug "IV 24 Ciphered: "+PeekS( *CipheredString )
AESDecoder( *CipheredString, *DecipheredString, Len(String$), @Key$, 256, *IV24, #PB_Cipher_CBC )
Debug "IV 24 Deciphered: "+PeekS( *DecipheredString )
Debug "----------------"
;- IV16
Debug "IV 16 Byte"
AESEncoder( *SourceString, *CipheredString, Len( String$ ), @Key$, 256, *IV16, #PB_Cipher_CBC )
Debug "IV 16 Ciphered: "+PeekS( *CipheredString )
AESDecoder( *CipheredString, *DecipheredString, Len(String$), @Key$, 256, *IV16, #PB_Cipher_CBC )
Debug "IV 16 Deciphered: "+PeekS( *DecipheredString )
Debug "----------------"