AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.11.2005, 16:39   #1  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2494 (89) +++++++++
Регистрация: 20.08.2005
Класс рассчитывает hash-суммы на основе алгоритмов MD2, MD4, MD5, SHA. В реализации используется CryptAPI, входящее в состав Windows.
Вложения
Тип файла: zip Crypt.zip (1.9 Кб, 271 просмотров)
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: NeveB (1), belugin (5), Logger (10), novic (1), AvrDen (1), gl00mie (3), rkorchagin (1).
Старый 02.07.2008, 20:22   #2  
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.

В чем может быть проблема? Сначала думал, что, вероятно, на сервере не запущен какой-то процесс. Но вроде не в этом дело.
Буду благодарен, если выскажете идеи на этот счет.
Старый 03.07.2008, 12:13   #3  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Регистрация: 29.04.2008
Адрес: Москва
Цитата:
Сообщение от IvanOFF Посмотреть сообщение
На сервере _CryptAcquireContext.call(prov, 0, 0, #PROV_RSA_FULL, 0) возвращает false, на моем WinXP - true.
Код:
BOOL WINAPI CryptAcquireContext(
  __out         HCRYPTPROV* phProv,
  __in          LPCTSTR pszContainer,
  __in          LPCTSTR pszProvider,
  __in          DWORD dwProvType,
  __in          DWORD dwFlags
);
When pszContainer is NULL, a default key container name is used. For example, the Microsoft Base Cryptographic Provider uses the logon name of the currently logged on user as the key container name. Other CSPs can also have default key containers that can be acquired in this way.

Может, на сервере currently logged on user неопределен?
Старый 03.07.2008, 15:59   #4  
IvanOFF is offline
IvanOFF
MCTS
MCBMSS
 
65 / 87 (3) ++++
Регистрация: 22.09.2005
Адрес: Москва
Цитата:
Сообщение от AndyD Посмотреть сообщение
Попробуй поменять в методе AcquireContext код на следующий
Спасибо! Теперь все работает.

Цитата:
Сообщение от RumataEstor Посмотреть сообщение
Может, на сервере currently logged on user неопределен?
А как его определить?
Старый 03.07.2008, 16:14   #5  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Регистрация: 29.04.2008
Адрес: Москва
Цитата:
Сообщение от IvanOFF Посмотреть сообщение
А как его определить?
Очевидно, выполнять код не от системной учетной записи, а от имени какого-нибудь пользователя. То, что у вас все заработало говорит о том, что этот параметр как раз и создавал проблему. Когда вы его установили в некоторое значение, то имя пользователя уже стало ненужным.
Теги
шифрование

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Нужно срочно дописать запрос помогите CRASH_505 DAX: Программирование 3 09.09.2008 10:49
помогите с DLL ZhanR DAX: Программирование 2 13.09.2006 12:31
Помогите с запросом.. DarkBear DAX: Программирование 2 15.08.2005 13:38
Помогите найти доку vitart DAX: Администрирование 18 03.07.2003 16:10
Ребята плиз помогите! Данные! niksa DAX: Программирование 6 17.12.2002 19:16
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:53.