pps: Der Fehler ist das der Speicher überschrieben wird aber keine neue Länge bekommt.
Huh? Wo wird Speicher überschrieben?
Beim Verschlüsseln wird Data auf ein Vielfaches von 16 aufgefüllt (ohne Speicherüberschreibung).
Ich nehme ja wohl an, dass dieser verschlüsselte Text dann
komplett wieder entschlüsselt wird. Da die Länge ein Vielfaches von 16 ist, kann er im CBC-Mode verarbeitet werden. Was übrigbleibt nach dem Entschlüsseln ist der Klartext+Padding, was noch entfernt werden muss.
Das Padding hängt n Bytes AnsiChar(n) an, wobei n = 16 - mod Klartextlänge ist. Mein Pseudocode macht das rückgängig.
Ersetze bei Dir form1.Memo1.Lines.Add(Data);
mit form1.Memo1.Lines.Add(Trim(Data));
und dann passt es.
In der DecryptText() funktion, falls das unklar ist.
Das wäre natürlich tödlich, da zB auch #9, #10, #13 entfernt würden.
Der komplette Ciphertext ist relevant.
Edit: Sehe gerade das über Base64 gegangen wird, da sollte trim kein Problem sein, weil im Base64 keine relevanten Nicht-Ansidaten vorhanden sind. Aber das kann nicht das Problem sein, weil DCPBase64.Base64DecodeStr(Data) einen Fehler werfen müsste, falls ungültige Zeichen auftauchen.