|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Спрятать все содержимое учебника
Мне поручили написать электронный учебник на делфи. И у меня возник вопрос о том как спрятать информацию от глаз? То есть конечно можно все в архив запоролить,но это как то не ок.
Может использовать пакеты или еще что? Материал учебника представлен в виде .txt и .html файлов. Я не силен в этих вопросах поэтому пришел сюда. У кого какие советы или статьи буду рад помощи. Заранее спасибо. |
#2
|
||||
|
||||
Xorом закриптовать в ресурсе.
Пишу программы за еду. __________________ |
#3
|
|||
|
|||
Не надо прятать то, что не нужно прятать. Максимум - затруднить простое чтение, для чего достаточно просто сохранить все в один файл (поток). А вот если там есть тесты, то их надо спрятать, точнее надо спрятать правильные ответы.
|
#4
|
||||
|
||||
Да я и сам не собирался нечего прятать,хотел тесты зашифровать,ибо ключ к тестам там же,да и что бы не смотрели вопросы. Но мне сказали что надо всё спрятать так что вот теперь сижу и думаю как и куда.
|
#5
|
|||
|
|||
Как тут уже писали - все гениальное просто.
Просто запакуй файлы с помощью 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
|
||||
|
||||
Лирическое отступление
Во времена учебы в колледже, у нас были электронные учебники, работающие в браузере, так вот, там была защита от копипаста, а обходилась она простым сохранением текущей страницы в текстовый файл. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#7
|
||||
|
||||
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
|
|||
|
|||
Да, походу Size для сжатого потока не определен. Придется выяснять длинну при записи, писать ее, потом данные. Читать в обратном порядке.
ЗЫ. В моем случае просто нет чтения всего потока, я читаю конкретные данные, конкретной длинны (по типам данных соотв. полей). Для выяснения размера данных можно использовать промежуточный поток, например TMemoryStream. |
#9
|
|||
|
|||
Да, вот так работает:
Код:
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
|
||||
|
||||
Да,спасибо все прекрасно работает )
|