{ JM> FUNCTION ConvertTxt (S : String) : String; JM> Var X : Byte; JM> Begin JM> ConvertTxt[0] := S[0]; JM> For X := 1 to Length(S) do JM> ConvertTxt[X] := Chr(Ord(S[X]) XOR (Random(128) or 128)); JM> End; JM> To encrypt a string, you just call ConvertTxt(string). Call JM> the function again, with the same parameters to decrypt. JM> Anyone have anything better, or have any suggestions? Here is basically the same function again. However note the RandSeed assignment - RandSeed is set to the length of the string before a string is processed. Since the length of the string never changes, you can randomly pick any string and be able to decrypt it. RandSeed is used to make Random return a specific sequence of psuedo-random numbers, and this encryption method relies on the same sequence in order for it to decrypt. } PROCEDURE EnDecrypt(VAR S: String); VAR X: Byte; BEGIN RandSeed := Length(S); FOR X := 1 TO Length(S) DO S[X] := Chr(Ord(S[X]) XOR (Random(128) OR 128)); END; VAR S: String; BEGIN Write('Enter a string: '); Readln(S); EnDecrypt(S); WriteLn; WriteLn; Writeln('The encrypted string is ', S); EnDecrypt(S); WriteLn; WriteLn; Writeln('The decrypted string is ', S); END.