bin gerade etwas verwirrt über das Verhalten von AddCipherBuffer in Bezug auf die AES Verschlüsselung.
Scheinbar wird bei jedem Aufruf von AddCipherBuffer() der übergebene Buffer einfach sofort verschlüsselt/entschlüsselt, egal welche Länge er hat, und auch wenn die mindestlänge oder ein vielfaches von 16 Bytes nicht erreicht wird.
Ich hätte nun erwartet, dass AddCipherBuffer() die "Pakete" selbst verwaltet und nur dann mit der verschlüsselt/entschlüsselt beginnt, wenn es erlaubt ist, und sich den Rest solange "merkt". Statt dessen, rechnet er einfach drauf los und produziert nur Müll. Zumal gibt es ja sogar FinishCipher(), und ich dachte damit werden dann "übriggebliebene" Bytes noch zu Ende Verschlüsselt.
Ich habe somit keine Chance einen 35 Byte langen Buffer zu zerlegen (außer in 16 und 19), wie man an diesem Beispiel sieht:
Code: Alles auswählen
*Key = AllocateMemory(16)
*Vector = AllocateMemory(16)
*Input = AllocateMemory(64)
*Output = AllocateMemory(64)
PokeS(*Input, "Hallo Welt! Hallo Welt! Hallo Welt!", -1, #PB_Ascii)
TotalLength = 35
CompilerIf #True
FirstPart = 18
StartAESCipher(1, *Key, 128, *Key, #PB_Cipher_Encode|#PB_Cipher_CBC)
AddCipherBuffer(1, *Input, *Output, FirstPart)
AddCipherBuffer(1, *Input+FirstPart, *Output+FirstPart, TotalLength-FirstPart)
FinishCipher(1)
CompilerElse
AESEncoder(*Input, *Output, TotalLength, *Key, 128, *Key, #PB_Cipher_CBC)
CompilerEndIf
AESDecoder(*Output, *Input, TotalLength, *Key, 128, *Key, #PB_Cipher_CBC)
Debug PeekS(*Input, TotalLength, #PB_Ascii)
Sollte man so ein Verhalten nicht in der Hilfe dokumentieren?
Oder übersehe ich hier irgendwas?
Ist das vielleicht sogar als Bug zu bezeichnen?