Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.01.2014, 12:28
Аватар для JunkieBeat
JunkieBeat JunkieBeat вне форума
Прохожий
 
Регистрация: 01.02.2013
Сообщения: 48
Версия Delphi: Delphi7 Lite Ed
Репутация: 10
По умолчанию Спрятать все содержимое учебника

Мне поручили написать электронный учебник на делфи. И у меня возник вопрос о том как спрятать информацию от глаз? То есть конечно можно все в архив запоролить,но это как то не ок.
Может использовать пакеты или еще что?
Материал учебника представлен в виде .txt и .html файлов.

Я не силен в этих вопросах поэтому пришел сюда. У кого какие советы или статьи буду рад помощи. Заранее спасибо.
Ответить с цитированием
  #2  
Старый 14.01.2014, 16:28
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Смех

Xorом закриптовать в ресурсе.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 14.01.2014, 17:31
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Не надо прятать то, что не нужно прятать. Максимум - затруднить простое чтение, для чего достаточно просто сохранить все в один файл (поток). А вот если там есть тесты, то их надо спрятать, точнее надо спрятать правильные ответы.
Ответить с цитированием
  #4  
Старый 14.01.2014, 19:34
Аватар для JunkieBeat
JunkieBeat JunkieBeat вне форума
Прохожий
 
Регистрация: 01.02.2013
Сообщения: 48
Версия Delphi: Delphi7 Lite Ed
Репутация: 10
По умолчанию

Да я и сам не собирался нечего прятать,хотел тесты зашифровать,ибо ключ к тестам там же,да и что бы не смотрели вопросы. Но мне сказали что надо всё спрятать так что вот теперь сижу и думаю как и куда.
Ответить с цитированием
  #5  
Старый 15.01.2014, 07:15
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Как тут уже писали - все гениальное просто.
Просто запакуй файлы с помощью zlib.
Начиная с Delphi 6, в поставке есть готовые потоки с поддержкой сжатия. Т.е. тебе нужна будет спец утилитка для подготовки файлов (сжатия их). а читать надо через соотв. поток.
Я делаю вот так:
Код:
procedure TModelBase.BackupToFile(AFileName: String);
var
  AStream : TFileStream;
  AZLib : TCompressionStream;
begin
  AStream := TFileStream.Create(AFileName,fmCreate);
  AZLib := TCompressionStream.Create(clMax,AStream);
  Try
    SaveToStream(AZLib);
  Finally
    AZLib.Free;
    AStream.Free;
  End;
end;

procedure TModelBase.RestoreFromFile(AFileName: String);
var
  AZLib : TDecompressionStream;
  AStream : TFileStream;
begin
  AStream := TFileStream.Create(AFileName,fmOpenRead);
  AZLib := TDecompressionStream.Create(AStream);
  Try
    LoadFromStream(AZLib);
  Finally
    AZLib.Free;
    AStream.Free;
  End;
end;

Методы LoadFromStream и SaveToStream внутри работают с обычным потоком (TStream).
Ответить с цитированием
  #6  
Старый 15.01.2014, 07:58
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
Подмигивание

Лирическое отступление
Во времена учебы в колледже, у нас были электронные учебники, работающие в браузере, так вот, там была защита от копипаста, а обходилась она простым сохранением текущей страницы в текстовый файл.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #7  
Старый 16.01.2014, 14:26
Аватар для JunkieBeat
JunkieBeat JunkieBeat вне форума
Прохожий
 
Регистрация: 01.02.2013
Сообщения: 48
Версия Delphi: Delphi7 Lite Ed
Репутация: 10
По умолчанию

Imikle, спасибо за ответ,вот только возникла ошибка при чтение файла,сохраняет хорошо а вот при чтение выдает ошибку "EDecompressionError 'Invalid Stream Operation' " вот код
Код:
procedure TForm1.btn2Click(Sender: TObject);
var
  AZLib : TDecompressionStream;
  AStream : TFileStream;
begin
  AStream := TFileStream.Create('C:\Users\User\Desktop\Новая папка (3)\qwe.txt',fmOpenRead);
  AZLib := TDecompressionStream.Create(AStream);
  Try
    mmo1.Lines.LoadFromStream(AZLib);/////вот тут ошибка
  Finally
    AZLib.Free;
    AStream.Free;
  End;

end;
Ответить с цитированием
  #8  
Старый 17.01.2014, 07:27
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Да, походу Size для сжатого потока не определен. Придется выяснять длинну при записи, писать ее, потом данные. Читать в обратном порядке.

ЗЫ. В моем случае просто нет чтения всего потока, я читаю конкретные данные, конкретной длинны (по типам данных соотв. полей). Для выяснения размера данных можно использовать промежуточный поток, например TMemoryStream.
Ответить с цитированием
  #9  
Старый 17.01.2014, 07:31
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Да, вот так работает:
Код:
uses
  ZLib;

procedure TForm1.Button1Click(Sender: TObject);
var
  AStream : TFileStream;
  AZLib : TCompressionStream;
  AMemStream : TMemoryStream;
  ALen : Int64;
begin
  AStream := TFileStream.Create('c:\test.z',fmCreate);
  AMemStream := TMemoryStream.Create;
  AZLib := TCompressionStream.Create(clMax,AStream);
  Try
    Memo1.Lines.SaveToStream(AMemStream);
    AMemStream.Seek(0,0);
    ALen := AMemStream.Size;
    AZLib.WriteBuffer(ALen,SizeOf(Int64));
    AZLib.CopyFrom(AMemStream,ALen);
  Finally
    AZLib.Free;
    AStream.Free;
  End;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  AZLib : TDecompressionStream;
  AStream : TFileStream;
  AMemStream : TMemoryStream;
  ALen : Int64;
begin
  AStream := TFileStream.Create('c:\test.z',fmOpenRead);
  AZLib := TDecompressionStream.Create(AStream);
  AMemStream := TMemoryStream.Create;
  Try
    AZLib.ReadBuffer(ALen,SizeOf(Int64));
    AMemStream.CopyFrom(AZLib,ALen);
    AMemStream.Seek(0,0);
    Memo1.Lines.LoadFromStream(AMemStream);
  Finally
    AMemStream.Free;
    AZLib.Free;
    AStream.Free;
  End;
end;
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
JunkieBeat (18.01.2014)
  #10  
Старый 18.01.2014, 15:56
Аватар для JunkieBeat
JunkieBeat JunkieBeat вне форума
Прохожий
 
Регистрация: 01.02.2013
Сообщения: 48
Версия Delphi: Delphi7 Lite Ed
Репутация: 10
По умолчанию

Да,спасибо все прекрасно работает )
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:46.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter