Помощь - Поиск - Пользователи - Календарь
Полная версия: Файлы - кодирование и декодирование
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Татка
Создать программу кодирования и декодирования файла по следующему принципу: пользователь вводит пароль, программа на основе символов пароля циклически увеличивает символы в файле.

Например:
Пароль содержит символы с кодами 46,54,105.
Файл содержит символы с кодами 35,200,34,221,10,13.
Результирующий файл содержит символы с кодами (35+46,200+54,34+105,221+46,10+54,13+105).

:p2:
volvo
Цитата(Татка @ 7.06.05 21:08)
Результирующий файл содержит символы с кодами (35+46,200+54,34+105,221+46,10+54,13+105).

wacko.gif
Код символа ограничен: 0 - 255, там выходит 267, что будем делать?
Татка
Я думаю, если код символа больше 255, то код символа минус 255. Ну а обратно принцип понятен. :p2:
volvo
Цитата(Татка @ 7.06.05 22:24)
Ну а обратно принцип понятен.

Ну, раз понятен, то попробуй реализовать... Вот мне например не понятен rolleyes.gif Вот шифрование:
var
  f_in, f_out, f_key: text;
  ch, key_ch: char;
begin
  assign(f_in, 'file_in.txt'); reset(f_in);
  assign(f_key, 'file_key.txt'); reset(f_key);

  assign(f_out, 'file_out.txt'); rewrite(f_out);

  while not eof(f_in) do begin
    read(f_in, ch);

    read(f_key, key_ch);
    if eof(f_key) then reset(f_key);

    ch := char((ord(ch) + ord(key_ch)) mod 255);
    write(f_out, ch);
  end;

  close(f_out);
  close(f_key);
  close(f_in);
end.
Татка
Цитата
Ну, раз понятен, то попробуй реализовать... Вот мне например не понятен 


Ну с Паскалем у меня туговато, а вот аналитически - пожалуйста:
например:
250 + 46 = 296

шифруем:
(296 > 255) ? 296 - 255 = 41

дешифруем:
41 - 46 = -5

(-5 < 0) ? 255 + (-5) = 250
volvo
Ну, я же привел шифрование уже...
Тогда дешифрование будет таким:
var
  f_in, f_out, f_key: text;
  ch, key_ch: char;
  T: shortint;
begin
  assign(f_in, 'file_out.txt'); reset(f_in);
  { то что зашифровали предыдущей программой }

  assign(f_key, 'file_key.txt'); reset(f_key);
  { тот же ключ }

  assign(f_out, 'file_sec.txt'); rewrite(f_out);
  { то что расшифруется - должно быть идентично file_in.txt }

  while not eof(f_in) do begin
    read(f_in, ch);

    read(f_key, key_ch);
    if eof(f_key) then reset(f_key);

    T := ord(ch) - ord(key_ch);
    ch := char(T + byte(T < 0)*255);
    write(f_out, ch);
  end;

  close(f_out);
  close(f_key);
  close(f_in);
end.
Татка
:flowers:
Спасибо, спасибо, спасибо!!! :molitva:
:rose:
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.