TMyEncryptor
TMyEncryptor
Здравствуйте.
Решил зашифровать БД.
Но не всю, а лишь отдельные строки(не столбцы).Я так понял, что основная реализация компонента- шифрование столбцов.
Нашел свойство Encript, а что туда писать не понял.Первое адрес буфера,второе тип данных, последнее длина.Какие типы данных бывают, я не нашел в документации?Хороший компонент, но хорошо бы иметь примерчик на С++.Мне надо зашифровать UnicodeString перед сохранением в БД.
Решил зашифровать БД.
Но не всю, а лишь отдельные строки(не столбцы).Я так понял, что основная реализация компонента- шифрование столбцов.
Нашел свойство Encript, а что туда писать не понял.Первое адрес буфера,второе тип данных, последнее длина.Какие типы данных бывают, я не нашел в документации?Хороший компонент, но хорошо бы иметь примерчик на С++.Мне надо зашифровать UnicodeString перед сохранением в БД.
-
- Devart Team
- Сообщения: 51
- Зарегистрирован: Пн 28 янв 2013 11:54
Re: TMyEncryptor
Здравствуйте.
Метод TMyEncryptor.Encrypt применяется для внутренних нужд компонентов. Вызывать его на прямую нет необходимости. TMyEncryptor следует использовать в связке с TMyQuery или TMyTable.
Суть работы компонента TMyEncryptor заключается в следующем. Когда вы изменяете данные через TMyQuery или TMyTable с помощью Insert/Edit/Post , то подключённый компонент TMyEncryptor будет шифровать заданные поля только для текущей редактируемой записи. Аналогично, этот компонент будет расшифровывать данные в этих полях при открытии датасета. Перечень полей для шифрования можно задавать в свойстве TMyQuery.Encryption.Fields. Однако заметьте, не все типы данных можно шифровать. Более подробную информацию о применении TMyEncryptor вы можете найти в статье "Data Encryption" в справке по MyDAC.
Метод TMyEncryptor.Encrypt применяется для внутренних нужд компонентов. Вызывать его на прямую нет необходимости. TMyEncryptor следует использовать в связке с TMyQuery или TMyTable.
Суть работы компонента TMyEncryptor заключается в следующем. Когда вы изменяете данные через TMyQuery или TMyTable с помощью Insert/Edit/Post , то подключённый компонент TMyEncryptor будет шифровать заданные поля только для текущей редактируемой записи. Аналогично, этот компонент будет расшифровывать данные в этих полях при открытии датасета. Перечень полей для шифрования можно задавать в свойстве TMyQuery.Encryption.Fields. Однако заметьте, не все типы данных можно шифровать. Более подробную информацию о применении TMyEncryptor вы можете найти в статье "Data Encryption" в справке по MyDAC.
Re: TMyEncryptor
Не всегда хватает производительности компьютера для такого решения. Иногда достаточно шифровать самое важное. Мне всего лишь надо знать, какие типы данных нужно передавать во втором параметре и что(где) на выходе.
-
- Devart Team
- Сообщения: 51
- Зарегистрирован: Пн 28 янв 2013 11:54
Re: TMyEncryptor
Здравствуйте.
В следующих версиях MyDAC метод Encrypt будет скрыт.
Однако, мы рассматриваем возможность создания целенаправленных компонентов для шифрования данных.
В следующих версиях MyDAC метод Encrypt будет скрыт.
Однако, мы рассматриваем возможность создания целенаправленных компонентов для шифрования данных.
Re: TMyEncryptor
Жаль.
Нашел решение DCPCrypt.
Нашел решение DCPCrypt.
Re: TMyEncryptor
У меня так не работает.DemetrionQ писал(а):Здравствуйте.
Метод TMyEncryptor.Encrypt применяется для внутренних нужд компонентов. Вызывать его на прямую нет необходимости. TMyEncryptor следует использовать в связке с TMyQuery или TMyTable.
Суть работы компонента TMyEncryptor заключается в следующем. Когда вы изменяете данные через TMyQuery или TMyTable с помощью Insert/Edit/Post , то подключённый компонент TMyEncryptor будет шифровать заданные поля только для текущей редактируемой записи. Аналогично, этот компонент будет расшифровывать данные в этих полях при открытии датасета. Перечень полей для шифрования можно задавать в свойстве TMyQuery.Encryption.Fields. Однако заметьте, не все типы данных можно шифровать. Более подробную информацию о применении TMyEncryptor вы можете найти в статье "Data Encryption" в справке по MyDAC.
Кидаю mytable myencryptor в mytable прописываю encriptor кодирование аес256
Таблица с полями: автоинкремент ид беззнаковое инт, уникальное варчар, и техт
Пишу
Код: Выделить всё
MyTable1->Append();
MyTable1->FieldByName("CO_NAME")->AsString="pass";
MyTable1->FieldByName("CO_PASS")->AsString="password";
MyTable1->Post();
-
- Devart Team
- Сообщения: 51
- Зарегистрирован: Пн 28 янв 2013 11:54
Re: TMyEncryptor
Здравствуйте.
Пример использования TMyEncryptor :
В базе данных поле CO_PASS будет зашифровано, но через MyTable1 оно будет выглядеть расшифрованным, так как к MyTable1 подключён настроенный TMyEncryptor.
Ошибка "дублирование данных" может возникать из-за того, что вы пытаетесь добавить запись с не уникальным значением в поле CO_NAME (которое в вашей таблице создано как UNIQUE).
Пример использования TMyEncryptor :
Код: Выделить всё
MyTable1->Encryption->Fields="CO_PASS";
MyTable1->Encryption->Encryptor->Password=1234;
MyTable1->Open();
MyTable1->Append();
MyTable1->FieldByName("CO_NAME")->AsString="pass";
MyTable1->FieldByName("CO_PASS")->AsString="password";
MyTable1->Post();
Ошибка "дублирование данных" может возникать из-за того, что вы пытаетесь добавить запись с не уникальным значением в поле CO_NAME (которое в вашей таблице создано как UNIQUE).
Re: TMyEncryptor
Все работает, только размеры полей надо больше делать, как расчитать размер?
-
- Devart Team
- Сообщения: 51
- Зарегистрирован: Пн 28 янв 2013 11:54
Re: TMyEncryptor
Здравствуйте.
Если TMyEncryptor.DataHeader равен ehTagAndHash или ehTag, то длину результирующих данных можно рассчитать по следующей формуле:
ResultLength = (GUIDLength + IVLength + CipherLength) * SymbolSize;
CipherLength = (((8 + DataLength + HashLength) / BlockSize) + 1) * BlockSize;
где
GUIDLength = 16;
IVLength = 8;
DataLength - длина исходных данных;
HashLen - длина хэша, 16 байт для алгоритма MD5 и 20 байт для SHA1, добавляется к результату если TMyEncryptor.DataHeader = ehTagAndHash;
BlockSize - размер блока используемого алгоритма шифрования;
SymbolSize = 2, если данные на сервере хранятся в строковом поле (так как данные дополнительно конвертируются в HEX-строку), = 1 для бинарных полей.
Если TMyEncryptor.DataHeader равен ehNone, то длина результирующих зашифрованных данных равна длине нешифрованных данных.
Если TMyEncryptor.DataHeader равен ehTagAndHash или ehTag, то длину результирующих данных можно рассчитать по следующей формуле:
ResultLength = (GUIDLength + IVLength + CipherLength) * SymbolSize;
CipherLength = (((8 + DataLength + HashLength) / BlockSize) + 1) * BlockSize;
где
GUIDLength = 16;
IVLength = 8;
DataLength - длина исходных данных;
HashLen - длина хэша, 16 байт для алгоритма MD5 и 20 байт для SHA1, добавляется к результату если TMyEncryptor.DataHeader = ehTagAndHash;
BlockSize - размер блока используемого алгоритма шифрования;
SymbolSize = 2, если данные на сервере хранятся в строковом поле (так как данные дополнительно конвертируются в HEX-строку), = 1 для бинарных полей.
Если TMyEncryptor.DataHeader равен ehNone, то длина результирующих зашифрованных данных равна длине нешифрованных данных.