In der Regel wird bei solchen Chiffren nicht vom ASCII-Wert ausgegangen, sondern vom Buchstabenwert, sprich A=1, B=2, usw.

1. Den Buchstabenwert kannst du dadurch erhalten, indem du den gesamten Text mit UpperCase() in Grossbuchstaben verwandelst und dann vom Ascii-Wert jedes Zeichens den Ascii-Wert von 'A' abziehst.

2. Das selbe machst du mit deinem Passwort. Dann addierst du den Zahlenwert des Buchstabens im Passwort zum Zahlenwert deines zu verschluesselnden Zeichens und nimmst das Ergebnis modulo der Anzahl von Zeichen in deinem Alphabet, denn damit faengst du wieder von vorne an, wenn du durch das Alphabet durch bist ( Z + 1 = A ).

Wenn du allerdings wirklich das GANZE ASCII verwenden willst, entfaellt natuerlich Punkt 1, und die Laenge deines Alphabets in Punkt 2 betraegt dann 256 Zeichen.

Das ganze koennte in Delphi dann in etwa so aussehen ...

Erzeuge drei TEdit EingabeFelder auf deinem Form (Edit1, Edit2 und Edit3) sowie einen Button (Button1). Dann erzeuge im Objectinspector ein OnClickEvent fuer den Button. in der Procedure Button1Click, die Delphi anlegt schreibe folgendes: [Ja Jeez, ich weiss, das ist schlechter Stil, aber ich will jetzt nicht erst das Erstellen seperater Funktionen in Delphi erklaehren muessen.]

Code:
procedure TForm1.Button1Click(Sender: TObject);  // Die OnClickMethode
var i,pwlen: Integer; // zwei Zahlen, mit denen wir rechnen wollen
     StrIn: String; // Da kommt der zu verschluesselnde Text rein
     StrPw: String; // Da kommt der das Passwort rein
     StrOut: String; // Da kommt der verschluesselte Text rein

begin  // Anfang des Codes

  StrIn := Edit1.text;  // Lies den zu verschluesselnden Text aus Edit1
  StrPw := Edit2.text; // Lies das Passwort aus Edit2
  pwlen := Length(StrPw); // Ermittel die Laenge des Passwortes
  StrOut := StrIn;  // Initialisiere das Resultat mit dem zu verschluesselnden Text

  for i:=1 to Length(StrIn) do  // Fuer jedes Zeichen in StrIn fuehre aus
    StrOut[i] := Chr(( Ord(StrIn[i]) + Ord(StrPw[ (i-1) mod pwlen + 1]) ) mod 256);

  { Das war kompliziert, daher erklaehre ich es.
    StrOut[i] bezeichnet das ite Zeichen in der Ausgabezeichenkette, welches wir ersetzen.
    Chr(Zahl) wandelt den in Zahl gespeicherten ASCII-Code in das entsprechende Zeichen um.
    Ord(Zeichen) gibt den ASCII-Code des Zeichens zurueck, also eine Zahl zwischen 0 und 255.
    StrIn[i] ist das ite Zeichen im zu verschluesselndem Text.
    (i-1) mod pwlen ermittelt den Rest der Division von (i-1) / pwlen.
    Das heisst im Klartext: Wenn i (also der Zaehler der Zeichen im Input)
    groesser als die Anzahl der Zeichen im Passwort ist, faengt das Passwort von
    vorne an zu zaehlen. Die (i-1) ist noetig, da wenn i = pwlen wird
    i mod pwlen = 0 ergibt. Daher muss, da wir Zahlen zwischen 1 und pwlen haben
    wollen, eine 1 addiert werden und damit muessen wir vorher von jedem i eine
    1 abziehen. StrPw[ (i-1) mod pwlen + 1] ermittelt also das passende Zeichen
    im Passwort, mit dem verschluesselt wird. Dessen ASCII-Wert wird nun zum
    ASCII-Wert des zu verschluesselnden Zeichens addiert und durch mod 256 wieder
    auf den Bereich zwischen 0 und 255 abgebildet.
  }

  Edit3.text := StrOut; // Das Ergebnis wird im Edit3 angezeigt.

end;  // Ende des Codes
Ich hoffe, das bringt dich weiter. bedenke aber, dass ASCII-Codes < 32 auch nicht druckbare Zeichen enthalten, die werden dann meist als schwarzes | dargestellt.

Gruss Ineluki