02.07.2008, 20:22 | #21 |
MCTS
|
Цитата:
Использую Ваш класс 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); } На 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, 09:44 | #22 |
Участник
|
Попробуй поменять в методе AcquireContext код на следующий
X++: #define.PROV_RSA_FULL(1) #define.CRYPT_NEWKEYSET(0x00000008) #define.NTE_BAD_KEYSET( 0x80090016 ) private void AcquireContext() { DLLFunction _CryptAcquireContext = new DLLFunction(_dll, "CryptAcquireContextA"); Binary prov = new Binary(4); int err; ; _CryptAcquireContext.returns(ExtTypes::DWord); _CryptAcquireContext.arg(ExtTypes::Pointer, ExtTypes::String, ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord); prov = new Binary(4); if (!_CryptAcquireContext.call(prov, "AxaptaKeyset", 0, #PROV_RSA_FULL, 0)) { err = winapi::getLastError(); if (err == #NTE_BAD_KEYSET) { if (!_CryptAcquireContext.call(prov, "AxaptaKeyset", 0, #PROV_RSA_FULL, #CRYPT_NEWKEYSET)) { _prov = 0; } else { _prov = prov.dWord(0); } } } else _prov = prov.dWord(0); }
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: IvanOFF (1). |
03.07.2008, 12:13 | #23 |
очами вижу
|
Цитата:
Код: BOOL WINAPI CryptAcquireContext( __out HCRYPTPROV* phProv, __in LPCTSTR pszContainer, __in LPCTSTR pszProvider, __in DWORD dwProvType, __in DWORD dwFlags ); Может, на сервере currently logged on user неопределен? |
|
03.07.2008, 15:59 | #24 |
MCTS
|
|
|
03.07.2008, 16:14 | #25 |
очами вижу
|
Очевидно, выполнять код не от системной учетной записи, а от имени какого-нибудь пользователя. То, что у вас все заработало говорит о том, что этот параметр как раз и создавал проблему. Когда вы его установили в некоторое значение, то имя пользователя уже стало ненужным.
|
|
19.11.2012, 22:04 | #26 |
Участник
|
Добрый день!
Использую класс Hash, за который огромное спасибо! Возникла проблема что на Windows Server 2008 R2 64x шифрование не происходит, а на 7-ке 32x все работает отлично. Не подскажете как ее решить или в каком направлении двигаться? |
|
19.11.2012, 22:57 | #27 |
Участник
|
Так и должно быть на 64-bit OS.
В зависимости от того какие функции нужны, можно воспользоваться функционалом .Net или поискать готовую стороннюю .Net сборку, например: http://cryptapi.sourceforge.net/home.html Последний раз редактировалось handy-comp; 19.11.2012 в 23:02. |
|
20.11.2012, 06:17 | #28 |
Участник
|
У нас тоже возникла подобная проблема.
handy-comp, вы дали ссылку на библиотеку CryptAPI. Не подскажете, кто-нибудь уже использовал данную сборку? Коллеги, может кто решал проблему альтернативным способом? |
|
20.11.2012, 10:39 | #29 |
Участник
|
Из этой сборки использовал функцию для blowfish алгоритма но не в Ax проекте.
Если необходим только MD5 hash думаю лучше использовать стандартные возможности .Net. |
|
|
За это сообщение автора поблагодарили: Tarrash (1). |
20.11.2012, 11:54 | #30 |
Участник
|
Цитата:
System.Security.Cryptography.MD5CryptoServiceProvider |
|
20.11.2012, 12:52 | #31 |
Участник
|
|
|
20.11.2012, 13:07 | #32 |
Участник
|
Вот пример текста готовой функции хеширования MD5 на NET для AX2009.
Может пригодится кому... X++: static void Job159(Args _args) { System.Security.Cryptography.MD5 md5; System.Text.Encoding encoding; System.Byte byte; System.Text.StringBuilder stringBuilder; System.Array array; int i; int len; str _text2Hash = "ggg"; str md5code; ; new InteropPermission(InteropKind::ClrInterop).assert(); md5 = System.Security.Cryptography.MD5::Create(); encoding = System.Text.Encoding::GetEncoding(0); array = md5.ComputeHash(encoding.GetBytes(_text2Hash)); stringBuilder = new System.Text.StringBuilder(); len = array.get_Length(); for (i = 0; i < len; i++) { byte = array.GetValue(i); stringBuilder.Append(byte.ToString("x2")); } md5code = stringBuilder.ToString(); info(md5code); } |
|
|
За это сообщение автора поблагодарили: Daiver (1), AvrDen (1), altap (1). |
Теги |
шифрование |
|
Похожие темы | ||||
Тема | Ответов | |||
Нужно срочно дописать запрос помогите | 3 | |||
помогите с DLL | 2 | |||
Помогите с запросом.. | 2 | |||
Помогите найти доку | 18 | |||
Ребята плиз помогите! Данные! | 6 |
|