Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Разработка интерфейса пользователя. “ Введите текст для крипто кодировки.После этого нажмите клавиши ввод-----шифр-----сохранить ” - это метка (label) ⇐ ПредыдущаяСтр 2 из 2
“ Введите текст для крипто кодировки.После этого нажмите клавиши ввод-----шифр-----сохранить ” - это метка (label), в данной программе используются всего лишь как подпись окна Поле ввода данных(Edit) - поле куда пользователь может ввести фразу Поле с надписью «результат» (ТMemo) - поле где будет выведен шифр Так же есть таблица(StringGrid) – где наглядно показывается где размещены символы при шифровке Так же есть кнопки «Ввод», «Шифр», «Сохранить» (Button) – кнопки с которими взаимодействует пользователь
Листинг программы unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, Grids, XPMan;
type TForm1 = class(TForm) StringGrid1: TStringGrid; Knopka1: TBitBtn; Edit1: TEdit; XPManifest1: TXPManifest; Shifr: TButton; MainMemo: TMemo; Save: TButton; Label1: TLabel; procedure FormActivate(Sender: TObject); procedure Knopka1Click(Sender: TObject); procedure ShifrClick(Sender: TObject); procedure SaveClick(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1; i, x, y, z, r, o, a, a2, a3, m, mx, m0: byte; Text0, Text1: String; ShifrStolb: array [1..7] of byte = (1, 2, 3, 7, 6, 5, 4); //ключ к столбцам 7 цифр ShifrStrok: array [1..6] of byte = (1, 2, 6, 3, 5, 4); //ключ к строкам 6 цифр Hash: array [1..42] of string; //---Save----------------------------------------------------------------------- F: TextFile; u, g: integer; so: string;
implementation
{$R *.dfm} //-----------------------Нумерация StringGrid----------------------------------- procedure TForm1.FormActivate(Sender: TObject); begin for x: = 1 to StringGrid1.RowCount-1 do StringGrid1.Cells[0, x]: = inttostr(StringGrid1.Row+x-1); for y: = 1 to StringGrid1.ColCount-1 do StringGrid1.Cells[y, 0]: = inttostr(StringGrid1.Col+y-1); Shifr.Enabled: = False; //выкл.кн. шифр Save.Enabled: = False; end; // -Проверка символов на количесво и изменение пробелов на другие символы------- procedure TForm1.Knopka1Click(Sender: TObject); begin m: =(StringGrid1.RowCount-1)*(StringGrid1.ColCount-1); m0: =m-1; Shifr.Enabled: = True; Text0: = edit1.Text; i: = length(Text0); if i > m then ShowMessage ('Вы ввели больше '+inttostr(m)+' символов.Лишние обрезаны! '); if i < m then ShowMessage ('Вы ввели меньше '+inttostr(m)+' символов. Данные сохранены.'); SetLength (Text0, m); for mx: = 0 to m0 do begin if Text0[mx] = ' ' then Text0[mx]: = #63; //заполнение? между словами end; for mx: = i to m0 do Text0[mx+1]: = #63; //заполнение? лишнего пространства end; //------------------ Сортировка по столбцам ------------------------------------ procedure TForm1.ShifrClick(Sender: TObject); begin y: =1; x: =1; o: =1; a: =1; a2: =1; a3: =1; for y: = 1 to StringGrid1.RowCount-1 do begin for x: = 1 to StringGrid1.ColCount-1 do begin StringGrid1.Cells[ShifrStolb[x], y]: = Text0[o]; o: =o+1; end end; //---------------------копирование строки в кеш--------------------------------- begin for y: = 1 to StringGrid1.RowCount-1 do begin for x: = 1 to StringGrid1.ColCount-1 do begin Hash[a]: =StringGrid1.Cells[x, y]; a: =a+1; end; end; //------------------ Сортировка по строкам ------------------------------------- begin for x: = 1 to StringGrid1.ColCount-1 do begin for y: = 1 to StringGrid1.RowCount-1 do begin StringGrid1.Cells[x, ShifrStrok[y]]: = Hash[a2]; a2: =a2+1; end; end; //-----------------------Вывод шифра-------------------------------------------- begin for y: = 1 to StringGrid1.RowCount-1 do begin for x: = 1 to StringGrid1.ColCount-1 do begin Text1: = Text1+(StringGrid1.Cells[x, y]); a3: =a3+1; end; end; MainMemo.Lines.Add(text1); Shifr.Enabled: = False; Save.Enabled: = True; end; end; end; end; //---------------Запись в Файл-------------------------------------------------- procedure TForm1.SaveClick(Sender: TObject); begin AssignFile(f, 'Result.txt'); Rewrite(f); for u: =0 to StringGrid1.RowCount-1 do begin so: =''; For g: =0 to StringGrid1.ColCount-1 do so: =so+StringGrid1.Cells[g, u]+' '; writeln(f, so); writeln(f, ''); end; CloseFile(f); Save.Enabled: = False; end; end. Инструкция пользователя: Сначала в таблицу записывается текст сообщения, а потом поочередно переставляются столбцы, а затем строки. Cообщение «Неясное становится еще более непонятным» записывается с левого верхнего угла в таблицу из 6 строк и 7 столбцов по столбцам. Ключом к шифру служат номера столбцов 126354 и номера строк 1237654 исходной таблицы. Число вариантов двойной перестановки достаточно быстро возрастает с увеличением размера таблицы: для таблицы 3 на 3 их 36, для 4 на 4 их 576, а для 5 на 5 их 14400. Пример данного метода шифрования показан в следующих таблицах:
1.Исходная таблица:
|