Показать сообщение отдельно
Старый 02.07.2008, 20:22   #21  
IvanOFF is offline
IvanOFF
MCTS
MCBMSS
 
65 / 87 (3) ++++
Регистрация: 22.09.2005
Адрес: Москва
Цитата:
Сообщение от 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.

В чем может быть проблема? Сначала думал, что, вероятно, на сервере не запущен какой-то процесс. Но вроде не в этом дело.
Буду благодарен, если выскажете идеи на этот счет.