Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2009, 05:53   #1
Zempery
Пользователь
 
Аватар для Zempery
 
Регистрация: 21.11.2009
Сообщений: 24
По умолчанию

Шифрование методом Атбаш. Мне надо чтоб текст для шифровки брался из одного txt-файла, а зашифрованный текст записывался в другой txt-файл. Помогите плиз, срочно к зачету нужно!!!

Вот код, тока здесь применяется Memo

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    Label1: TLabel;
    Label2: TLabel;
    Memo2: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}



function Atbash(s:string):string;
var
  i:Integer;
begin
  for i:=1 to Length(s) do
  s[i]:=Chr(255-Ord(s[i]));
  Result:=s;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.Text:=Atbash(memo1.Text);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
memo1.Text:=Atbash(memo1.Text);
end;

end.
правило шифрования состоит в замене i-й буквы алфавита буквой с номером n - i + 1, где n - число букв в алфавите.
Если ты думаешь, что сможешь или нет, ты в любом случае прав.

Последний раз редактировалось Stilet; 25.11.2009 в 07:37.
Zempery вне форума Ответить с цитированием
Старый 21.11.2009, 07:23   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Код:
const alf='QWERTY';
var txt: string;
for j:=1 to len(txt) do
begin
  i:=pos(txt[j],alf);
  txt[j]:=alf[n-i+1];
end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 21.11.2009, 07:36   #3
Zempery
Пользователь
 
Аватар для Zempery
 
Регистрация: 21.11.2009
Сообщений: 24
По умолчанию

и что этот код создаст файл-txt?
Если ты думаешь, что сможешь или нет, ты в любом случае прав.
Zempery вне форума Ответить с цитированием
Старый 21.11.2009, 08:05   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Блин... ну нельзя же быть таким беспомощным!!!
Неужели нельзя открыть ЛЮБУЮ книжку по Паскалю/Дельфи и прочитать там раздел работа с файлами!??!?!!!

В вашем случае, чтобы сохранить содержимое Memo1 в текстовый файл достаточно:
Код:
  Memo1.Lines.SaveToFile('ТутИмяВашегоТекстовогоФайла.txt')

NB.
а вообще, чтобы записать что-то в файл
используйте либо классический подход (через файловые переменные). например:
Код:
var f : textfile;
begin
   AssignFile(f,'ТутИмяВашегоТекстовогоФайла.txt');
   {открываем на запись (тем самым перезаписываем файл!) }
   Rewrite(f);
   for i:=0 to Memo1.Lines.Count-1 do
     Writeln(f, Memo1.Lines.Strings[i]);
   CloseFile(f);
либо через TFileStream (пример кода писать не буду, сами разберётесь, если понадобится!)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.11.2009, 05:46   #5
Zempery
Пользователь
 
Аватар для Zempery
 
Регистрация: 21.11.2009
Сообщений: 24
По умолчанию

Почему когда загрузка текста идет через файл текст в зашифрованном виде отображается квадратиками(при русском и англ. языке, на другом компе тока при рус)????

ЛЮДИ ПОМОГИТЕ ПОЖАЛУЙСТА!!!
Если ты думаешь, что сможешь или нет, ты в любом случае прав.

Последний раз редактировалось Stilet; 23.11.2009 в 09:30.
Zempery вне форума Ответить с цитированием
Старый 22.11.2009, 11:04   #6
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Цитата:
ЛЮДИ ПОМОГИТЕ ПОЖАЛУЙСТА!!!
В чем конкретно? Попытайтесь сформулировать свои проблемы почетче.
Покажите свои наработки, где не получается или не понятно.
Цитата:
Почему когда загрузка текста идет через файл текст в зашифрованном виде отображается квадратиками(при русском и англ. языке, на другом компе тока при рус)????
А где это видно? Сами подумайте - нормальный человек в ответ на Ваш "вопль" ( ПОМОГИТЕ !) , что должен делать?
Программирование - это область деятельности, не допускающая неопределенности. Вот и старайтесь спрашивать вполне определенные вещи.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 22.11.2009, 11:36   #7
Zempery
Пользователь
 
Аватар для Zempery
 
Регистрация: 21.11.2009
Сообщений: 24
По умолчанию

Цитата:
А где это видно?
в созданном файле, отображаются квадратики.
если вместо создания файла использовать Memo то там введенный текст отображается в виде вертикальных палок



Цитата:
В чем конкретно? Попытайтесь сформулировать свои проблемы почетче.
Покажите свои наработки, где не получается или не понятно.
нужно чтоб при при нажатии на кнопку "зашифровать" текст считывался из файла, и уже в зашифрованном виде помещался во вновь созданный другой файл-txt.

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    RadioGroup1: TRadioGroup;
    Memo1: TMemo;


    procedure RadioGroup1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}



function shifrovka(s:string):string;
var
  i:Integer;
begin
  for i:=1 to Length(s) do
  s[i]:=Chr(255-Ord(s[i]));
  Result:=s;
end;

procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
If RadioGroup1.ItemIndex=0 then
begin
memo1.Lines.loadfromfile('c:\1.txt');
memo1.Text:=shifrovka(memo1.Text);
end
else
If RadioGroup1.ItemIndex=1 then
memo1.Text:=shifrovka(memo1.Text);
memo1.Lines.savetofile('c:\2.txt');
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
 memo1.Text:=' ';
end;

end.
Если ты думаешь, что сможешь или нет, ты в любом случае прав.

Последний раз редактировалось Stilet; 25.11.2009 в 07:38.
Zempery вне форума Ответить с цитированием
Старый 22.11.2009, 16:39   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Zempery
проект (исходники, *.PAS, *.DPR, *.DFM) и тестовый файл(ы) запакуйте в архив и выложите архив сюда, на форум (это делается через ответ в "Расширенный режим - Управление вложениями". (если нет ещё прав прикреплять вложения на форум - тогда выложите на любой файлообменник, сюда ссылку на скачивание!)
Иначе можно только гадать..

точно можно сказать одно - проблема в кодировках!!!

Прежде всего, на какой Дельфи программируете? Если RAD 2009/2010 - то там могут быть проблемы с unicode.

Либо, высока вероятность того, что Вы используете шрифт, в котором НЕТ русских букв. Либо UNICODE шрифт и не задаёте русскую локаль...

выкладывайте проект.. посмотрим, что у Вас там творится..

p.s. если скорость интернета позволяет, то можете в архив включить и исполняемый файл (т.н. "EXEшник")
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.11.2009, 02:17   #9
Zempery
Пользователь
 
Аватар для Zempery
 
Регистрация: 21.11.2009
Сообщений: 24
По умолчанию

ссылка на исходник --> http://depositfiles.com/files/eio0a8228

Цитата:
Прежде всего, на какой Дельфи программируете? Если RAD 2009/2010 - то там могут быть проблемы с unicode.
Версия Delphi --> Delphi 7


Цитата:
Либо, высока вероятность того, что Вы используете шрифт, в котором НЕТ русских букв. Либо UNICODE шрифт и не задаёте русскую локаль...
Шрифт использую стандартный (ничего не меняю)

Еще нужно чтоб верстка(переносы, отступы, и т.п.) зашифрованного текста была такая же как и в исходном
Если ты думаешь, что сможешь или нет, ты в любом случае прав.

Последний раз редактировалось Stilet; 23.11.2009 в 09:31.
Zempery вне форума Ответить с цитированием
Старый 23.11.2009, 11:55   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию замечания по программе

всё у Вас работает! (почти - смотри ниже)

1) как и ожидалось, проблема в кодировке исходного файла. Текстовый файл должен быть в кодировке Windows! (она же ANSI, она же Win-1251)
пример файла в правильной кодировке во вложении.

2) код русской буквы я равен 255. в результате перекодировки получается ноль. и он потом рушит работу каких-то компонентов... Ноль в строке считается как конец строки!
поэтому рекомендую исправить код кодирования на:
Код:
  for i:=1 to Length(s) do begin
    s[i]:=Chr(256-Ord(s[i]));
3) в обработке нужно файл 2.txt писать только если второй RadioGroup выбран. Там у Вас пропущены begin / end... имхо, разумеется...
Код:
If RadioGroup1.ItemIndex=1 then begin
  memo1.Text:=shifrovka(memo1.Text);
  memo1.Lines.savetofile('2.txt');
end;
4) и последнее. Логика работы программы не очень прямая... ;( Надо позволять ввести текст в Мемо и потом его уже кодировать/раскодировать. А сохранять/загружать надо ПО ДРУГИМ событиям. (например, добавить кнопочки сохранить текст, загрузить текст.)
Это тоже Имхо, разумеется...

удачи.
Вложения
Тип файла: rar example1.rar (227 байт, 76 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм шифрования методом Виженера(теория) beegl Помощь студентам 6 30.10.2014 23:27
Метод шифрования\дешифрования методом гаммирования, используя для гаммы алгоритм случайных чисел... Си. Mastu-Basta Помощь студентам 0 13.09.2009 16:19
Помогите написать прогу шифрования/дешифрования DiSpalL Помощь студентам 8 31.05.2009 09:25
Помогите пожалуйста Написать программу Шифрования по методу гомирования anton_m207 Помощь студентам 1 16.04.2009 10:23