Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Шифрование таблиц базы данных


Автор: former 3.3.2006, 19:17
Тема такая: Есть база данных из нескольких таблиц (Paradox) с графическими и текстовыми полями. Как обеспечить шифрование и дешифрование даных (включая графику .jpeg) всей таблицы при закрытии и открытии таблицы из своей программы и обеспечить защиту от просмотра и извлечения данных из других приложений?

Автор: Softaz 4.3.2006, 10:24
При простейшем шифровании, когда каждая буква А, скажем заменяется на Z, можно .
А в программе, если пользователь ввел слово AAAAAA, то при ображении к базе использовать слово ZZZZZZ.

Автор: former 4.3.2006, 17:34
Как зашифровать текст язнаю. То как ты пояснил - это слишком просто. Есть более продвинутые алгоритмы.
Добавлено @ 17:36
А вот как шифровать через поток при работе с базой и графику и текст? Вот в чём вопрос.

Автор: Albinos_x 4.3.2006, 17:51
в Paradox есть стандартные среддства по шифрованию, по рс4

Автор: former 4.3.2006, 18:07
А как ими пользоваться?

Автор: Albinos_x 5.3.2006, 05:14
Код

Session.AddPassword('123456789123');

Автор: former 5.3.2006, 15:48
Но это получается пароль на базу, а его можно взломать. Есть три универсальных пароля.

Автор: Albinos_x 5.3.2006, 17:12
Цитата(former @ 5.3.2006, 15:48 Найти цитируемый пост)
Но это получается пароль на базу, а его можно взломать

взломать можно любой пароль, вопрос только, сколько это займёт времени... в этом случае будет зависеть от длины пароля и от того как ты его храниш и получаешь... если ты напишешь как я выше написал, то он будет открыто храниться в ехе-нике и его можно будет достать даже обычным блокнотом, точно также если ты дейтсвуешь через константу. Чтоб уйти от этого недостатка его лучше генерировать во время выполнения программы и желательно, чтобы периодически он менялся, тогда взломать будет трудней. Сам же применяемый алгорим шифрования наиболее эффективен при длине пароля 6-8 символов...

Автор: former 6.3.2006, 23:43
Я имею виду, что если просматривать таблицу с таким паролем через Corel Paradox, то этими тремя паролями можно открыть таблицу.

Автор: Albinos_x 7.3.2006, 00:05
на счёт Corel Paradox не знаю, т.к. не работал с этой программкой, а вот DataBase Desktop зная пароль можно...

Автор: former 7.3.2006, 17:57
Создай таблицу, запароль её и попробуй один из следующих кодов: jIGGAe, nx66ppx, cupcdvum. Почёму я и предлагаю шифровать и дешифровать записи во время работы программы через поток. Только не знаю как работать с потоками.

Автор: Albinos_x 7.3.2006, 18:55
Цитата(former @ 7.3.2006, 17:57 Найти цитируемый пост)
Создай таблицу, запароль её и попробуй один из следующих кодов: jIGGAe, nx66ppx, cupcdvum.

а слона то я и не заметил smile ...

Автор: AlexSuv 7.3.2006, 22:19
Возьми какой-нибудть компонент для работы с базами парадокса с открытым кодом, найди функцию, которая
читает/пишет данные из/в таблиц и в этом месте вставить функцию шифрации/дешифрации, можно также сжимать
данные, используя библиотеку ZStream например.

Насчет криптования очень неплохая библиотека dccrypt http://www.cityinthesky.co.uk, сможешь криптовать
хоть с использванием закрытого ключа.

Еще в принципе, как вариант, если защита сильныя не нужна можно перед работой расшифровывать файл, а после
закрытия зашифрововать, ну это так защитка от новичков, а если хочешь серьезную - работай с исходниками компонентов
достуба к БД, хотя это тоже так пыль в глаза пустить, если надо взломают.

Автор: former 8.3.2006, 00:14
Для этой цели не нужно искать другие компоненты. Хватит родных. Можно использовать сабытие BeforeAction компонента DBNavigator, отлавливая нажатие кнопок. А вот как в этом случае работаль сo Steam-ом (как например при сохранении jpeg в Paradox). А что это за библиотека ZStream и как ей пользоваться?

Автор: AlexSuv 8.3.2006, 13:34

Пользваться ZStreamom очень просто:
Код

Var
     src,dst : TMemoryStream;
Begin
  src := TMemoryStream.Create;
   TBlobField('UnCompressedText').SaveToStream(src);
     src.Position := 0;
     dst := TMemoryStream.Create;
      GZipStream(src, dst, 6);//Все  dst содержит сжатый src  поток 6 - стпень сжатия
     {На этом месте может также стоять функция криптования из вышеприведенной мной библиотеки}
   TBlobField('CompressedText').LoadFromStream(src);
  src.Free;
  dst.free;
End;

Вот и все просто, правда?

А при чем тут DBNavigator? К сжатию базы понять не могу.
И что ты там собрался вешать на BeforeAction ? ИМХО ты что-то не то говоришь former.

Если в каких-то нестандартных компнентах будет событие например OnBeforeRawWriteToDatabase, тогда это возможно.

Автор: former 8.3.2006, 17:50
Цитата

Вот и все просто, правда?


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

Цитата

А при чем тут DBNavigator? К сжатию базы понять не могу.
И что ты там собрался вешать на BeforeAction ? ИМХО ты что-то не то говоришь former.


Яимел ввиду, что событие BeforeAction можно использовать при работе с базой, что бы при перелистовании записей происходила их шифрация и дешифрация (контролируя нажатие кнопок
Код

if Button=nbPost then
, например).


Автор: AlexSuv 9.3.2006, 04:39
Цитата(former @ 8.3.2006, 17:50)
Цитата

Вот и все просто, правда?


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

Цитата

А при чем тут DBNavigator? К сжатию базы понять не могу.
И что ты там собрался вешать на BeforeAction ? ИМХО ты что-то не то говоришь former.


Яимел ввиду, что событие BeforeAction можно использовать при работе с базой, что бы при перелистовании записей происходила их шифрация и дешифрация (контролируя нажатие кнопок
Код

if Button=nbPost then
, например).

Цитата

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


Я не писал только про шифровку блобов, просто спросили, как юзать zStream и потоки, я показал на примере, а насчет
того чтобы шифровать поля по BeforeAction - это бред, по-нормальному это можно сделать только если перерезать какой-то поток который пишет/читает базу данных в сыром виде. Вот именно в эту процедуру и вклиниться с шифровкой или
компрессией.

Автор: former 9.3.2006, 18:44
Цитата

...по-нормальному это можно сделать только если перерезать какой-то поток который пишет/читает базу данных в сыром виде. Вот именно в эту процедуру и вклиниться с шифровкой или
компрессией.



Вопрос в том, какой?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)