Меня смущает то, что ты складываешь i-й символ ключа с i-м текста в обоих случаях. Во-вторых в Шифре Цезаря идёт сдвиг каждого символа на определённое фиксированное число. Так что поясни что ты хочешь сделать.
http://ru.wikipedia.org/wiki/Шифр_Цезаря
Сча набросал, вроде работает, лови:
Код:
//Найти позицию символа в алфавите
function PosInVoc(Symbol : Char; Vocabulary : String) : Word;
var
i : Word;
begin
Result := 0;
for i := 1 to Length(Vocabulary) do
if Vocabulary[i] = Symbol then
begin
Result := i;
break;
end;
end;
//Шифрование Цзарем
function Caesar(Text : String; Seed : Byte; Vocabulary : String; Encrypt : Boolean = True) : String;
var
i : LongWord;
n, pos : Word;
begin
Result := '';
n := Length(Vocabulary);
Seed := Seed mod n;
if Length(Text) <> 0 then
for i := 1 to Length(Text) do
begin
pos := PosInVoc(Text[i], Vocabulary);
if Encrypt then Result := Result + Vocabulary[(pos + Seed) mod n]
else Result := Result + Vocabulary[(pos - Seed + n) mod n]
end;
end;
//Использование
procedure TForm1.Button1Click(Sender: TObject);
Begin
//текст - "hello", шифруется в эдит1, дешифрация в эдит2
Edit1.Text := Caesar('hello', 3, 'qwertyuiopasdfghjklzxcvbnm', true);
Edit2.Text := Caesar(Edit1.Text, 3, 'qwertyuiopasdfghjklzxcvbnm', false);
end;