IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Кодирование и декодлирование текстовой информации методом Гронсфельда
MultiBlock
сообщение 4.10.2006 16:12
Сообщение #1





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


Народ, помогите, пожалуйста, с программой! Нужно соединить 2 части (шифратор и дешифратор) + нужно чтобы текст забивался через программу, либо читался из файла, а результат записывался тоже в файл, но в другой. И цифровой ключ должен вводиться тоже через программу! Помогите!
P.S. Спасибо всем кто откликнется!

Код

{
Шифровальщик
Программа читает файл s и записывает результат в s1
}

function getnum(c: char): integer;
var
  n: integer;
begin
  case c of
    '0': n := 0;
    '1': n := 1;
    '2': n := 2;
    '3': n := 3;
    '4': n := 4;
    '5': n := 5;
    '6': n := 6;
    '7': n := 7;
    '8': n := 8;
    '9': n := 9;
  else
    n := -1;
  end;
  getnum := n;
end;

const
  N1 = 10; { максимальное количество строк в файле }
  N2 = 2; { количество алфавитов }
var
  f,f1: text;
  s,n,s1: string;
  i,j,k,l,m: integer;
  c: integer; { счётчик пизиции в строке кода }
  w : array [1..N1] of string; { строки }
  w1 : array [1..N1] of string; { строки }
  abc : array [1..N2] of string; { алфавиты }
begin
  abc[1] := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  abc[2] := 'abcdefghijklmnopqrstuvwxyz';
  writeln(''); writeln(' *** Шифровка методом Гронсфельда ***');
{
  write('Имя файла: '); readln(s); write('Цифровой ключ (4 или меньше цифры ): '); readln(n);
}
  s := 'C:\Work4\1.dat';
  s1 := 'C:\Work4\2.dat';
  n := '2718';
  assign(f,s); assign(f1,s1);
  reset(f); rewrite(f1);
  i := 1;
  { читаем файл }
  while not EOF(f) and (i<=N1) do begin
    readln(f,w[i]); w1[i]:=w[i];
    inc(i);
  end;
  { кодируем }
    { 1-й цикл - по строкам из файла }
    { 2-й цикл - по элементам в строке из файла }
    { 3-й цикл - по алфавитам }
    { 4-й цикл - по элементам алфавита }
  c := 1;
  for i := 1 to N1 do if ord(w[i][0])<>0 then
  for j := 1 to (ord(w[i][0])+1) do
  for k := 1 to N2 do
  for l := 1 to (ord(abc[k][0])+1) do begin
    if abc[k][l]=w[i][j] then begin
      m := l+getnum(n[c]); inc(c); if c>ord(n[0]) then c := 1;
      if m>ord(abc[k][0]) then m := m-ord(abc[k][0]);
      w1[i][j] := abc[k][m];
    end;
  end;
  writeln('');
  for i:=1 to N1 do begin
    writeln(w[i]);
    writeln(w1[i]);
  end;
  for i := 1 to N1 do begin
    for j := 1 to ord(w1[i][0]) do write(f1,w1[i][j]);
    writeln(f1,'');
  end;
  writeln('Нажмите Enter');
  read(s);
end.


Код

{
Дешифратор
Программа читает файл s и записывает результат в s1
}

function getnum(c: char): integer;
var
  n: integer;
begin
  case c of
    '0': n := 0;
    '1': n := 1;
    '2': n := 2;
    '3': n := 3;
    '4': n := 4;
    '5': n := 5;
    '6': n := 6;
    '7': n := 7;
    '8': n := 8;
    '9': n := 9;
  else
    n := -1;
  end;
  getnum := n;
end;

const
  N1 = 10; { максимальное количество строк в файле }
  N2 = 2; { количество алфавитов }
var
  f,f1: text;
  s,n,s1: string;
  i,j,k,l,m: integer;
  c: integer; { счётчик пизиции в строке кода }
  w : array [1..N1] of string; { строки }
  w1 : array [1..N1] of string; { строки }
  abc : array [1..N2] of string; { алфавиты }
begin
  abc[1] := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  abc[2] := 'abcdefghijklmnopqrstuvwxyz';
  writeln(''); writeln(' *** Шифровка методом Гронсфельда ***');
{
  write('Имя файла: '); readln(s); write('Цифровой ключ (4 или меньше цифры ): '); readln(n);
}
  s := 'C:\Work4\2.dat';
  s1 := 'C:\Work4\3.dat';
  n := '2718';
  assign(f,s); assign(f1,s1);
  reset(f); rewrite(f1);
  i := 1;
  { читаем файл }
  while not EOF(f) and (i<=N1) do begin
    readln(f,w[i]); w1[i]:=w[i];
    inc(i);
  end;
  { кодируем }
    { 1-й цикл - по строкам из файла }
    { 2-й цикл - по элементам в строке из файла }
    { 3-й цикл - по алфавитам }
    { 4-й цикл - по элементам алфавита }
  c := 1;
  for i := 1 to N1 do if ord(w[i][0])<>0 then
  for j := 1 to (ord(w[i][0])+1) do
  for k := 1 to N2 do
  for l := 1 to (ord(abc[k][0])+1) do begin
    if abc[k][l]=w[i][j] then begin
      m := l-getnum(n[c]); inc(c);
if c>ord(n[0]) then c := 1;
      if m<1 then m := m+ord(abc[k][0]);
      w1[i][j] := abc[k][m];
    end;
  end;
  writeln('');
  for i:=1 to N1 do begin
    writeln(w[i]);
    writeln(w1[i]);
  end;
  for i := 1 to N1 do begin
    for j := 1 to ord(w[i][0]) do write(f1,w1[i][j]);
    writeln(f1,'');
  end;
  writeln('Нажмите Enter');
  read(s);
end.


Сообщение отредактировано: MultiBlock - 4.10.2006 16:14
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 4.10.2006 17:00
Сообщение #2


Гость






Файл GRONSFLD.PAS
function GronsfeldEncipher(toCode, K: string): string;
var i, T, _T: integer;
begin
for i := 1 to length(toCode) do begin
_T := ord(toCode[ i ]);

T := (Ord(toCode[ i ])

+
(Ord(K[(pred(i) mod length(K)) + 1]) - Ord('0'))

);

if T >= 256 then dec(T, 256);
toCode[ i ] := Chr(T);
end;
GronsfeldEncipher := toCode;
end;

function GronsfeldDecipher(toDecode, K: string): string;
var i, T: integer;
begin
for i := 1 to length(toDecode) do begin
T := (Ord(toDecode[i])

-
(Ord(K[(pred(i) mod length(K)) + 1]) - Ord('0'))

);
if T < 0 then Inc(T, 256);
toDecode[ i ] := Chr(T);
end;
GronsfeldDecipher := toDecode;
end;

var
s: string;

f_in, f_out: text;


begin
if (paramcount < 3) or (

(paramstr(1) <> '/e') and (paramstr(1) <> '/d')

) then exit;

assign(f_in, paramstr(2));
reset(f_in);
assign(f_out, paramstr(3));
rewrite(f_out);

while not eof(f_in) do begin

readln(f_in, s);
if paramstr(1) = '/e' then
s := GronsfeldEncipher(s, '2178')
else
s := GronsfeldDecipher(s, '2178');

writeln(f_out, s);
end;

close(f_out);
close(f_in);
end.


Запускать с 3-мя параметрами.
Первый:
/e или /d (соответственно для кодирования и ДЕкодирования)
Второй:
имя входного файла (ИЗ которого будет читаться информация для операции, заданной первым ключом)
Третий:
имя выходного файла (в него запишется информация, за- или рас-кодированная, в зависимости от первого ключа)...

Пример использования:
Цитата(console)
...>GRONSFLD /e 700.txt 700.out

шифрует текст, содержащийся в файле 700.txt, и записывает результат в файл 700.out (Внимание!! Если файл 700.out уже существует - он будет перезаписан!!!)

Цитата(console)
...>GRONSFLD /d 700.out 700.txt

дешифрует текст, содержащийся в файле 700.out, и записывает результат в файл 700.txt (аналогично, если файл 700.txt уже существует - он тоже будет перезаписан!!!)

Пример файла, на котором тестировалась программа:
Прикрепленный файл  700.txt ( 664 байт ) Кол-во скачиваний: 456
 К началу страницы 
+ Ответить 

Сообщений в этой теме
MultiBlock   Кодирование и декодлирование текстовой информации методом Гронсфельда   4.10.2006 16:12
volvo   Здесь есть реализация процедур шифровки/дешифровки...   4.10.2006 16:26
MultiBlock   Я видел... дело в том что я только начал осваивать...   4.10.2006 16:39
volvo   Файл GRONSFLD.PAS function GronsfeldEncipher(toCod...   4.10.2006 17:00
MultiBlock   Не работает код :blink: просто вылетает сразу по...   6.10.2006 14:46
volvo   MultiBlock, я бы попросил добавлять в следующий ра...   6.10.2006 14:49
MultiBlock   Может я что-то не правильно делаю, поэтому и не ра...   6.10.2006 15:15
MultiBlock   Опять обращаюсь к Вам за помощью. Вот объединил дв...   16.10.2006 21:57
volvo   У тебя скорее всего не хватает End-ов в программе,...   17.10.2006 1:36
lygger   volvo выложи пожалуйста ЕХЕ своей программы. буду ...   25.04.2007 16:11
volvo   Вот EXE: Как пользоваться - см. пост №4 ...   25.04.2007 17:39
Mihanik   Как пользоваться - см. пост №4 ... ув. Volvo...   11.05.2007 20:25
lygger   спасибо огромное!   2.05.2007 17:41
Mihanik   Неужели так трудно нарисовать алгоритм?   13.05.2007 14:00
volvo   Под алгоритмом имеется в виду ЧТО? Блок-схема? Неу...   13.05.2007 14:06
Mihanik   Под алгоритмом имеется в виду ЧТО? Блок-схема? Не...   13.05.2007 14:35


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 10:14
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"