Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Проблема с получением идентификатора после вызова `CryptDeriveKey` в 64-битной версии Delphi XE4

Delphi , Синтаксис , Шифрование

Проблема с получением идентификатора после вызова CryptDeriveKey в 64-битной версии Delphi XE4

Вопрос, поднятый пользователем, заключается в проблеме получения идентификатора после вызова функции CryptDeriveKey в 64-битной версии среды разработки Delphi XE4. Проблема проявляется в том, что при компиляции под 32-битную версию Windows все работает корректно, и идентификаторы, получаемые после вызова функции, имеют большие числовые значения. Однако при компиляции под 64-битную версию Windows второй проверочный идентификатор (после CryptDeriveKey) оказывается равным нулю, в то время как первый идентификатор (перед CryptDeriveKey) остается большим числом.

Описание проблемы

Пользователь столкнулся с проблемой, когда при работе с 64-битной версией Delphi XE4, используя функции криптографической библиотеки Windows, получал нулевые идентификаторы после выполнения некоторых операций. Это происходит в контексте использования функций CryptAcquireContext, CryptCreateHash, CryptHashData и CryptDeriveKey. Пользователь также упоминает, что он пытался изменить тип переменной hProv на ULong64, но это не привело к решению проблемы.

Контекст

В контексте, предоставленном пользователем, приведены константы и внешние функции для работы с криптографическими алгоритмами, а также процедура Test64, демонстрирующая использование этих функций. Важной частью контекста является использование константы CRYPT_VERIFYCONTEXT и проверка идентификаторов hProv и hHash с помощью MessageBox.

Подтвержденный ответ

Проблема, описанная пользователем, заключается в неправильном типировании идентификаторов, возвращаемых функциями криптографической библиотеки. В 64-битной версии Windows типы HCRYPTPROV, HCRYPTKEY и HCRYPTHASH должны быть представлены как NativeUInt, а не как 32-битные целые числа. Это связано с тем, что в 64-битной системе указатели имеют размер 64 бит.

Альтернативный ответ

Пользователь также упоминает альтернативный ответ, который предполагает использование правильного типа данных для переменных hProv, hKey и hHash. Однако в предоставленном коде изменения типа данных не видно, что указывает на необходимость внесения этих изменений непосредственно в исходный код.

Рекомендации

  1. Используйте типы данных NativeUInt для переменных hProv, hKey и hHash в 64-битной версии Delphi.
  2. Избегайте создания собственных типов данных для Windows API функций.
  3. Используйте стандартные имена функций Windows API без изменений.
  4. При необходимости используйте параметры типа var вместо указателей.

Пример кода

var
  hProv, hKey, hHash: NativeUInt;
  key: string;
  CGuSoC: SizeOf(TChar);
begin
  key := 'my test password';
  CGuSoC := SizeOf(TChar);
  if not GuCryptAcquireContext(@hProv, nil, nil, PROV_RSA_AES, CRYPT_VERIFYCONTEXT) then
    MessageBox(0, 'Not CAC', 0, 0);
  // Проверка идентификатора hProv
  MessageBox(0, PChar(IntToStr(hProv)), 0, 0);
  // ... (остальной код)
end;

Заключение

Исправление типов данных переменных, используемых в криптографических функциях Windows, позволит избежать проблемы с нулевыми идентификаторами в 64-битной версии Delphi XE4. Рекомендуется также использовать готовые решения и библиотеки, которые уже адаптированы под 64-битные системы, чтобы избежать подобных ошибок.

Создано по материалам из источника по ссылке.

Пользователь столкнулся с ошибкой в 64-битной версии Delphi XE4, связанной с неправильным типом данных идентификаторов, возвращаемых функциями криптографической библиотеки Windows, что приводит к их обнулению.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Шифрование ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-03-14 13:11:04/0.003262996673584/0