![]() |
|
|
#1
|
|||
|
|||
|
Ребятки помоги пожалуйста! есть готовая программа. да вот препод говорит сделать надо шифрование данных перед записью в БД Access. как я понимаю еще надо и дешифрование тогда, когда из БД данные вытаскиваю. Как можно это все реализовать. Честно, не представляю как это будет выглядеть. Говорили про какие то модули шифрования. искала в инете, да только похожего примера не нашла. Базу подключала через ADO.
|
|
#2
|
||||
|
||||
|
Цитата:
Если препод - берем алгоритм "супер-пупер-невзламный-XOR". И далее уже супер-пупер-невзламно защищенные данные пишем в Access. |
|
#3
|
|||
|
|||
|
говорил препод.
алгоритм я поищу, а как его в делфи прописать ? может есть ссылочки или литература какая, где доступно пошагово пишут? |
|
#4
|
|||
|
|||
|
вот есть у меня процедура на добавление записи, как и куда что писать?
перед запросом? или нужно ранее где то сам алгоритм шифрования записать в делфи, а потом его вызывать на выполнение? Код:
procedure Taddtovar.Button1Click(Sender: TObject);
var query1:string;
idb:Integer;
begin
if (addtovar.Edit1.Text='') or (addtovar.Edit2.Text='') then
MessageDLG('Заполните все поля',mtError,[mbOk],0)
else
begin
idb:=idtovar+1;
addtovar.Edit4.Text:=IntToStr(idb);
//создание новой записи в таблице и добавление данных в строку
query1:='INSERT INTO Справочник_товаров VALUES('''+Edit4.Text+''','''+edit1.Text+''','''+edit2.Text+''',0);';//**Запрос для добавления записи
tovar.ADOQuery1.SQL.Clear;//**Очистка предыдущего запроса.
tovar.ADOQuery1.SQL.Text:=query1;//**Заносим запрос
tovar.ADOQuery1.ExecSQL;//**Выполнения запроса
//**Отображения содержимого базы
tovar.ADOQuery1.Active:=false;
tovar.ADOQuery1.SQL.Clear;
tovar.ADOQuery1.SQL.Add('SELECT * FROM Справочник_товаров');
tovar.ADOQuery1.Active:=true;
//перед закрытием окна очищаем поля для ввода
edit1.Text:='';
edit2.Text:='';
close
end;
end; |
|
#5
|
||||
|
||||
|
Та мого сопособов.
Например по сути у тебя полезные данные '''+Edit4.Text+''','''+edit1.Text+''','''+edit2.Te xt+''' [+ID+дата+время+контрольная сумма+...] перед тем как их добавить преобразуешь во что-то не особо читаемое... Тем же ксором... Цитата:
Прада там не самая оптимальная реализация. Но сойдет в учебных целях. П.с.:надо будет на досуге нормальную реализацию сделать и закинуть в фак. Последний раз редактировалось Konrad, 25.05.2011 в 01:01. |
|
#6
|
|||
|
|||
|
По моему в учебных целях даже модификация шифра цезаря сойдет:
Смысл ее в том, что каждый символ в открытом тексте заменяется буквой находящейся на [некоторое постоянное число+Порядковый номер в открытом тексте] (но не больше ограничения, если Поряд.№ кратен ограничению то счет номера начинается с 1) позиций правее него в алфавите. Например, в шифре со сдвигом 3, А была бы заменена на Д, Б станет Ж, и так далее. Результат записывается задом на перед. Например, в слово DELPHI станет IHPLED. A результатом всего кодирования слова DELPHI станет слово RPWRJH. Код:
function enCodeCaesarCriptMode(Const enCodeStr:String; Const Shift,MaxNum:Byte):String;
var
i:Cardinal;
j:byte;
CodedStr:String;
begin
CodedStr:='';
j:=0;
For i:=1 to Length(enCodeStr) do
begin
if i mod MaxNum = 0 then j:=0;
inc(j);
CodedStr:=Char(Ord(enCodeStr[i])+(Shift+j))+CodedStr;
end;
Result:=CodedStr;
end;
function deCodeCaesarCriptMode(enCodeStr:String; Const Shift,MaxNum:Byte):String;
var
i:Cardinal;
j:byte;
CodedStr:String;
begin
CodedStr:='';
for i:=Length(enCodeStr) downto 1 do
begin
CodedStr:=CodedStr+enCodeStr[i];
end;
enCodeStr:=CodedStr;
CodedStr:='';
j:=0;
For i:=1 to Length(enCodeStr) do
begin
if i mod MaxNum = 0 then j:=0;
inc(j);
CodedStr:=CodedStr+Char(Ord(enCodeStr[i])-(Shift+j));
end;
Result:=CodedStr;
end;
// Вызов функций
procedure TForm1.Button1Click(Sender: TObject);
begin
//первый параметр ТЕКСТ, второй СДВИГ, третий ОГРАНИЧЕНИЕ.
Memo2.Text:=enCodeCaesarCriptMode(Memo1.Text,3,25);//кодтровать
Memo3.Text:=deCodeCaesarCriptMode(Memo2.Text,3,25);//декодировать
end; |
|
#7
|
|||
|
|||
|
спасибо. становится понемногу понятнее смысл всего этого.
а у меня еще вопрос возник такой, а как DBGrid будет отображать эту кодированную информацию? как я себе это представляю пока, так это программно пройтись по всем строкам таблицы, декодировать инфу, и подцепить ее к гриду? так получается? |
|
#8
|
|||
|
|||
|
можно использовать вычисляемые поля, как одно из решений, все поля заменяем на вычисляемые в ADOQuery, и на событие вычисления ставим расшифровку. но это так, мысли...
|
|
#9
|
|||
|
|||
|
шифр Цезаря испробовала в действии, кодирует текст. все отлично. при извлечение в текст.поля тоже делает отлично. и остался вопрос по отображению данных в гриде. он мне строку добавил и данные отображает кодированные, для пользователя это будет не понятно для работы
![]() возник еще один вопрос, как быть с цифрами, если у меня есть число 74, он кодирует его в 9; а у меня поле в таблице только числовое, как с этим бороться можно? |
|
#10
|
|||
|
|||
|
яж написал, попробуйте вычисляемые поля... проще по-моему некуда будет, но зато будет работать )) или события ставить на чтение, запись в базу..в общем можно сделать я думаю...
Последний раз редактировалось Assistant, 25.05.2011 в 13:07. |
|
#11
|
|||
|
|||
|
я бы первым вариантом пользовался, так еще в базе не понятно для чего что хранится в поле число или строка
|
|
#12
|
|||
|
|||
|
Цитата:
|
|
#13
|
|||
|
|||
|
Цитата:
![]() |
|
#14
|
|||
|
|||
|
шифрование накладывает много ограничений, таких как использование ORDER BY в SQL, оно не будет сортировать как вам нужно
![]() |
|
#15
|
|||
|
|||
|
даааа. тут все походу переделывать у себя надо в прграмме.
![]() вот у меня ошибка начала выскакивать, когда кнопку нажимаю, все хорошо, вроде запись добавляет, начинаю трогать скрол грида, чтоб последнию строку посмотреть, так ругается "Grid index out of range". Assistant а вы можете пример привести, как сделать событие на чтение/запись данных? |