Цитата:
Сообщение от
AndyD
Класс рассчитывает hash-суммы на основе алгоритмов MD2, MD4, MD5, SHA. В реализации используется CryptAPI, входящее в состав Windows.
Здравствуйте!
Использую Ваш класс hash для шифрования строки. На моей машине с WinXP все шифруется нормально. Заметил, что при запуске клиента аксапты на сервере (проверял на 2-х серверах - Windows Server 2000 SP4 и Windows Server 2003 SP2) строка не шифруется из-за того, что метод acquireContext() класса hash отрабатывает по-разному на Windows XP и на сервере (пока это лишь предположение, что проблема в операционной системе). Текст метода:
X++:
#define.PROV_RSA_FULL(1)
#define.CRYPT_NEWKEYSET(0x00000008)
private void AcquireContext()
{
DLLFunction _CryptAcquireContext = new DLLFunction(_dll, "CryptAcquireContextA");
Binary prov = new Binary(4);
;
_CryptAcquireContext.returns(ExtTypes::DWord);
_CryptAcquireContext.arg(ExtTypes::Pointer, ExtTypes::DWord, ExtTypes::DWord,
ExtTypes::DWord, ExtTypes::DWord);
prov = new Binary(4);
if (!_CryptAcquireContext.call(prov, 0, 0, #PROV_RSA_FULL, 0))
_prov = 0;
else
_prov = prov.dWord(0);
}
На сервере _CryptAcquireContext.call(prov, 0, 0, #PROV_RSA_FULL, 0) возвращает false, на моем WinXP - true.
На msdn нашел описание функции CryptAcquireContext:
CryptAcquireContext - The CryptAcquireContext function is used to acquire a handle to a specified key container in a specified cryptographic service provider (CSP). The phProv parameter receives the handle to the specified key container. You can use this handle to call other API functions.
В чем может быть проблема? Сначала думал, что, вероятно, на сервере не запущен какой-то процесс. Но вроде не в этом дело.
Буду благодарен, если выскажете идеи на этот счет.