В современном мире обеспечение безопасности данных является приоритетной задачей для разработчиков программного обеспечения. Одной из областей, где это особенно важно, является работа с криптографическими алгоритмами. В контексте разработки на языке Object Pascal и использовании среды Delphi, важно использовать проверенные и надежные библиотеки для работы с криптографией.
В данной статье мы рассмотрим переход от использования библиотеки JwaWinCrypt к Jedi Apilib для улучшения криптографической безопасности в ваших проектах на Delphi. Jedi Apilib является проверенным решением, которое прошло испытание временем и предлагает более безопасные и эффективные инструменты для работы с криптографическими задачами.
Шаг 1: Понимание проблемы
Исходная проблема заключается в том, что использование самодельных решений для работы с криптографией, таких как JwaWinCrypt, может быть не только трудоемким, но и нести в себе риски безопасности. Jedi Apilib предлагает готовые решения, которые уже используются сообществом и прошли необходимые тесты.
Шаг 2: Пересмотр кода
Для начала рекомендуется пересмотреть и упростить исходный код, чтобы сделать его более читаемым и анализируемым. В качестве примера можно привести создание минимально необходимого консольного приложения (SSCCE), которое будет содержать только необходимый для понимания функционал.
Шаг 3: Исправление ошибок
В исходном коде были обнаружены следующие ошибки:
Записи не должны быть упакованы.
Второй параметр функции CryptUnprotectData не должен быть параметром по умолчанию (var).
В функции btn1Click не было присвоено значение переменной lpwszDesc, после чего она была передана в LocalFree.
В Unicode Delphi нет необходимости использовать WideString, достаточно привести string к PWideChar.
Обработка переменной cbData была некорректной из-за того, что SizeOf(Char) равен 2 в Unicode Delphi.
В функции DecryptPassword передавался неинициализированный указатель в CryptUnprotectData.
Функция DecryptPassword утеряла память, выделенную с помощью GetMem.
Функция DecryptPassword была сломана и не выполняла свои задачи.
Шаг 4: Использование Jedi Apilib
Для улучшения криптографической безопасности можно использовать Jedi Apilib, который является частью пакета Jedi. Это позволит избежать многих проблем, связанных с самописным кодом, и обеспечит более высокий уровень безопасности данных.
Шаг 5: Конвертация TBytes в DATA_BLOB
Одной из задач при использовании Jedi Apilib будет конвертация массива байтов TBytes в структуру DATA_BLOB. Важно решить, будет ли указатель pbData указывать на сам массив TBytes или же будет создана его копия.
Пример кода на Object Pascal (Delphi)
program ImprovedCryptography;
{$APPTYPE CONSOLE}
uses
System.SysUtils,
Winapi.Windows,
JclJediApilib; // Подключение Jedi Apilib
const
CRYPTPROTECT_LOCAL_MACHINE = 4;
type
_CRYPTOAPI_BLOB = record
cbData: DWORD;
pbData: PByte;
end;
DATA_BLOB = _CRYPTOAPI_BLOB;
...
function ConvertTBytesToDataBlob(TBytes: TBytes): DATA_BLOB;
var
DataBlob: DATA_BLOB;
begin
// Здесь должен быть код для конвертации TBytes в DATA_BLOB
// Например, создание копии массива или прямое использование указателя
// ...
end;
...
begin
// Основной цикл программы
// ...
end.
Заключение
Переход на использование Jedi Apilib в ваших проектах на Delphi позволит улучшить криптографическую безопасность и упростить разработку. Необходимо тщательно пересмотреть и отладить исходный код, а также правильно конвертировать данные между форматами, используемыми в библиотеке.
Эта статья представляет собой руководство для разработчиков, работающих с криптографией в Delphi, и предлагает практические шаги для улучшения безопасности их приложений.
Улучшение криптографической безопасности в проектах на Delphi через переход с использования библиотеки JwaWinCrypt на более надежную Jedi Apilib.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.