Mit "grob übernommen" kann zumindest ich nichts anfangen.
Bitte häng doch mal dein ganzes Projekt als Zip-Archiv an, den Teil zum Entschlüsseln haben wir noch gar nicht gesehen.
Sollte eigentlich symmetrisch sein.
Edit:
Die Größe des Arrays wird falsch berechnet, wenn die Wurzel aus der Länge des Strings eine Ganzzahl ist.
Delphi-Quellcode:
// falsch
// x:=trunc(sqrt(length(s1)))+1;
// richtig
if Length(s1) > 0 then
x := Trunc(Sqrt(Length(s1) - 1)) + 1
else
x := 0;
Ein anderes Problem betrifft nicht das Verschlüsseln selbst, sonders das Speichern des Strings in einem Memo.
Das Memo liefert als Text einen String mit Zeilenvorschüben die aus zwei nicht darstellbaren Zeichen CR + LF bestehen.
Durch das Verschlüsseln werden diese Zeichen auseinander gerissen.
Wird dieser Text dem Memo zugewiesen, verändert das Memo den Text, um diesen darstellen zu können.
Also nicht den Text des Memos abfragen, um diesen zu dekodieren, sondern den kodierten Text in einer Variable zwischenspeichern.