Spontan würde ich mal sagen du hast password und s verwechselt
Delphi-Quellcode:
if d<length(passwort) then d:=d+1;
if d>length(passwort) then d:=1 ;
s[i]:=char(Ord(s[i]) Xor Ord(passwort[d]));
PS: Dein Memo behandelt mit Sicherheit nicht alle Sonderzeichen so, wie du es willst ... heißt, wenn durch das XOR Zeichen zwischen #0 und #31 entstehen (also kleiner ' ' und vorallem bei #0, #10 und #13), dann wird da bestimmt das Ergebnis im Memo verfällscht und es läßt sich nicht mehr korrekt entschlüsseln.