Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
 Аватар для Elizium33
4 / 4 / 1
Регистрация: 16.04.2013
Сообщений: 85

Не расшифровывается текстовый файл

05.05.2014, 16:11. Показов 2248. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Есть небольшая программа по шифрованию текстовых файлов методом гаммирования.
Возникла проблема с дешифрацией. При выборе зашифрованного файла-нажимаю Дешифровать-в файле происходит повторное шифрование. Как исправить?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
var
  seqPSW : shortstring = 'D5wI5*%h(FK$';
 
function DecodeStr(const S : string) : string;
var I, J : Integer;
begin
  Result := S; J := 1;
  for I := 1 to Length(S) do begin
    Result[I] := AnsiChar(Byte(Result[I]) xor Byte(seqPSW[J]));
    if Result[I] = #0 then Result[I] := S[I];
    if J = Length(seqPSW) then J := 1 else Inc(J);
  end;
  end;
Миниатюры
Не расшифровывается текстовый файл  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.05.2014, 16:11
Ответы с готовыми решениями:

Дан текстовый файл. Используя стек, сформировать новый текстовый файл, каждая строка которого содержит символы
Дан текстовый файл. Используя стек, сформировать новый текстовый файл, каждая строка которого содержит символы соответствующей строки...

Вывод результата программы в текстовый файл и в двоичный файл с именем, задаваемым пользователем
Подскажите пожалуйста, что нужно исправить. Нужно организовать вывод результата программы в текстовый файл и в двоичный файл с именем,...

Дан текстовый файл f. Переписать компоненты файла f в файл g, заменив все пробелы символом '!'
Правильно ли я написала саму программу? и вообще, оно правда будет переписано в новый файл??? var f,g:textfile; c:char; ...

33
 Аватар для Elizium33
4 / 4 / 1
Регистрация: 16.04.2013
Сообщений: 85
06.05.2014, 10:24  [ТС]
Студворк — интернет-сервис помощи студентам
northener, да. либо перезапустил прогу. выбрал файл для расшифровки-выбрал путь для сохранения-нажал дешифровать
0
Заблокирован
06.05.2014, 13:50
Да вообще-то при гаммировании ничего выбирать не надо. Текст шифруется и расшифровывается одной и той же функцией. Пропустил раз - зашифровано. Пропустил второй раз - расшифровано.

Добавлено через 1 минуту
А это что за хрень AnsiChar(Byte(Result[I])?

Добавлено через 2 минуты
Вообще подход неверный. Гаммированию фиолетово, юникод и анси. Он работает с бинарником. И вам тоже нужно бинарником это делать. То есть работать на уровне байтов а не символов.
Мой вам совет, осваивайте потоки (TStream).
0
 Аватар для Elizium33
4 / 4 / 1
Регистрация: 16.04.2013
Сообщений: 85
06.05.2014, 17:49  [ТС]
Leoparrd, ну и как тогда будет?я не могу придумать
0
Заблокирован
06.05.2014, 19:15
var

STRM:TMemoryStream;//Объявляем поток памяти.

........................
В процедуре создаём его.

STRM:=TMemoryStream.Create;//

STRM.LoadFromFile('Text.txt'); Файл загружается как бинарник.

На далее просто. Узнаём размер потока.
Объявляем переменную (байт) для считывания - записи.
Объявляем переменную позиции.
Ну и в цикле читаем каждый байт, проводим над ним гаммирование и возвращаем на место.
Когда дошли до конца, сохраняем поток в файл. Вот собственно и всё.
0
Заблокирован
06.05.2014, 20:07
Лучший ответ Сообщение было отмечено Elizium33 как решение

Решение

Вот тебе исходник и не мучайся.
Обрати внимание, в случаях шифрования и дешифрирования работает одна функция.
Просто для удобства я сделал 2 кнопки. Текстовый файл имеется. Попросту нажимаешь одну кнопку. потом вторую и смотришь в папку. там появится файл зашифрованного текста и расшифрованного.
Сравни расшифрованный с исходником.
Ну а диалоги записи-загрузки добавляй сам.
Вложения
Тип файла: rar GAM.rar (5.8 Кб, 7 просмотров)
1
 Аватар для Elizium33
4 / 4 / 1
Регистрация: 16.04.2013
Сообщений: 85
06.05.2014, 20:27  [ТС]
Leoparrd, спасибо. а там комментарии есть в коде? хочется всё ж разобрать что к чему
0
Заблокирован
06.05.2014, 20:40
есть
0
 Аватар для Elizium33
4 / 4 / 1
Регистрация: 16.04.2013
Сообщений: 85
06.05.2014, 21:58  [ТС]
Leoparrd,
не понимаю как сюда прописать что бы на шифровку/расшифровку брался файл который нужен. (путь которого в edit)
Delphi
1
2
3
4
5
6
7
8
9
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  Work('1.txt','1.btt');
end;
 
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
  Work('1.btt','2.txt');
end;
Добавлено через 23 минуты
и при таком шифровании разве не должен открыться файл(текстовый) в котором просто кракозябры? или это все сохраняется в .btt-файл?
0
Заблокирован
06.05.2014, 22:09
Elizium33,
В 1.btt и есть кракозябы.

Процедура Work
1 параметр входной файл
2 параметр - выходной

Так и пишем.
Work(Edit1.text, (Здесь имя файла результа) );

Вам нужен второй эдит, в который прописыватся файл результата.

Добавлено через 2 минуты
Если написать так
Work(Edit1.text, Edit1.text);
И оставить одну кнопку, то нажав первый раз файл зашифруете. Втрой раз файл расшифруете. Но имя у него будет одно и тоже

Добавлено через 1 минуту
Кстати, можно в процедуру ввести третий параметр - строку пароля чтоб пароль можно было через строку вводить.
0
 Аватар для Elizium33
4 / 4 / 1
Регистрация: 16.04.2013
Сообщений: 85
06.05.2014, 22:14  [ТС]
Leoparrd, в самом первом сообщении есть картинка с формой.
Там 2 эдита.
в первом отображается путь к исходному файлу(тексту)
во втором отображается путь куда сохраняем.

Значит будет так:
для кнопки шифровать: Work(Edit1.Text, Edit2.Text);
для кнопки расшифровать получается тоже самое? ведь я могу выбрать файл для расшифровки

Добавлено через 4 минуты
Leoparrd, да ,ввод ключа было бы идеально. но как его присвоить?
Delphi
1
cod:=Edit3.Text;
0
Заблокирован
06.05.2014, 22:18
Да. тоже самое. Программа не видит разницы. То что дали то и съест.
Поэтому хватит одной кнопки и написать на ней Пуск

Добавлено через 1 минуту
Там локальные перменные. Щас напишу
0
 Аватар для Elizium33
4 / 4 / 1
Регистрация: 16.04.2013
Сообщений: 85
06.05.2014, 22:18  [ТС]
Leoparrd, Данный метод позволяет шифровать только текстовые файлы или любые?
0
Заблокирован
06.05.2014, 22:31
Лучший ответ Сообщение было отмечено Elizium33 как решение

Решение

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
procedure Work(nam1,nam2,cod:string);
 var
   buf:Byte; //áóôåð äëÿ ÷òåíèÿ è çàïèñè
   I:Integer;
   ln_:Integer; //Äëèíà êîäîâîé ñòðîêè
   CNT:Integer; //Ñ÷¸ò÷èê êîäà
begin
 
 ln_:= Length(cod);
 CNT:=1;
 STRM:=TMemoryStream.Create;//Ñîçäà¸ì ïîòîê
 STRM.LoadFromFile(nam1); //Çàãðóæàåì â ïîòîê ôàéë
 STRM.Position:=0;//Îáÿçàòåëüíûé ñáðîñ ïîçèöèè ïîòîêà â íà÷àëî.
 for i:=0 to STRM.Size-1 do begin
    STRM.Read(buf,1);
    buf:= buf xor Ord(Cod[CNT]);
    STRM.Position:=STRM.Position-1;
    STRM.Write(buf,1);
    if CNT = ln_ then CNT:=1 else CNT:= CNT + 1;//Ñëåæåíèå çà öèêëîì êîäà
                            end;
 STRM.SaveToFile(nam2);
 STRM.Free;//Îñâîáîæäåíèå ïîòîêà
end;
Добавлено через 36 секунд
Тогда сделайте третий этит, будете в него пароль набирать

Добавлено через 1 минуту
Например так
Work(Edit1.Text, Edit2.Text,Edit3.Text);

Добавлено через 36 секунд
Edit1.Text Входной файл
Edit2.Text Выходной файл
Edit3.Text Пароль

Добавлено через 2 минуты
Или непосредсвенно задавать
Delphi
1
Work(Edit1.Text, Edit2.Text, 'D5wI5*%h(FK$');
Добавлено через 1 минуту
А можно просто в строку вогнать любой другой файл.

Добавлено через 34 секунды
То есть паролем может быть, например, картинка

Добавлено через 16 секунд
Или звук

Добавлено через 1 минуту
Абсолютнго любые

Добавлено через 14 секунд
Что воткнёшь то и зашифрует
1
 Аватар для Elizium33
4 / 4 / 1
Регистрация: 16.04.2013
Сообщений: 85
06.05.2014, 22:32  [ТС]
Leoparrd, огромнейшее спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.05.2014, 22:32

Даны текстовый файл f. Записать в файл g элементы файла f
в обратном порядке.(консоль) Кто-нибудь знает как? Помогите, прошу.

Как расшифровывается RAD Studio
Доброе время суток. Скажите пожалуйста как расшифровывается RAD Studio , delphi XE. Есть хоть какая нибудь информация про компанию...

Файл: Записать в другой текстовый файл все ненулевые числа и номера строк, в которых они встретились.
Создать текстовый файл, в который записать не менее 20 целых чисел, в диапазоне от -9 до 9. Вывести содержимое файла на экран. Записать в...

Дан текстовый файл. Записать в отдельный файл все симметричные строки исходного файла, являющиеся отдельными предложения
Работа с файлами и строками,если можно,то напишите код,а если можно,то ещё с объяснениями

Файл: Переписать содержимое текстового файла a.txt диска С в текстовый файл в.txt без пробелов
1.Переписать содержимое текстового файла a.txt диска С в текстовый файл в.txt без пробелов 2.Дан текст.файл C:\Program Files\2.txt,в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru