По моему в учебных целях даже модификация шифра цезаря сойдет:
Смысл ее в том, что каждый символ в открытом тексте заменяется буквой находящейся на [некоторое постоянное число+Порядковый номер в открытом тексте]
(но не больше ограничения, если Поряд.№ кратен ограничению то счет номера начинается с 1) позиций правее него в алфавите. Например, в шифре со сдвигом 3, А была бы заменена на Д, Б станет Ж, и так далее.
Результат записывается задом на перед. Например, в слово DELPHI станет IHPLED.
A результатом всего кодирования слова DELPHI станет слово RPWRJH.
Код:
function enCodeCaesarCriptMode(Const enCodeStr:String; Const Shift,MaxNum:Byte):String;
var
i:Cardinal;
j:byte;
CodedStr:String;
begin
CodedStr:='';
j:=0;
For i:=1 to Length(enCodeStr) do
begin
if i mod MaxNum = 0 then j:=0;
inc(j);
CodedStr:=Char(Ord(enCodeStr[i])+(Shift+j))+CodedStr;
end;
Result:=CodedStr;
end;
function deCodeCaesarCriptMode(enCodeStr:String; Const Shift,MaxNum:Byte):String;
var
i:Cardinal;
j:byte;
CodedStr:String;
begin
CodedStr:='';
for i:=Length(enCodeStr) downto 1 do
begin
CodedStr:=CodedStr+enCodeStr[i];
end;
enCodeStr:=CodedStr;
CodedStr:='';
j:=0;
For i:=1 to Length(enCodeStr) do
begin
if i mod MaxNum = 0 then j:=0;
inc(j);
CodedStr:=CodedStr+Char(Ord(enCodeStr[i])-(Shift+j));
end;
Result:=CodedStr;
end;
// Вызов функций
procedure TForm1.Button1Click(Sender: TObject);
begin
//первый параметр ТЕКСТ, второй СДВИГ, третий ОГРАНИЧЕНИЕ.
Memo2.Text:=enCodeCaesarCriptMode(Memo1.Text,3,25);//кодтровать
Memo3.Text:=deCodeCaesarCriptMode(Memo2.Text,3,25);//декодировать
end;