| ||||
| ||||
Доброго времени суток, уважаемые... Вопрос не касается КриптоПро, но, думаю, это актуально для администраторов систем, где используются Aladdin eToken. Требуется с использованием eToken SDK_3.60 написать программу, которая бы позволяла удаленно разблокировать токен. Для этого в составе SDK имеется специальная функция SAPI_Server_Unblock, которой передаются административный пин-код и последовательность символов, полученная от клиента (если я правильно понял, то нужно использовать ту последовательность, которая генерируется утилитой eToken Properties). На выходе имеем ещё одну последовательность байт, которую следует сообщить клиенту и которую он введет в соответствующее окошко. Однако не выходит каменный цветок... :( При выполнении следующего кода, и вводе сгенерированной последовательности символов имеем ошибку "Аутентификация выполнена неудачно": //============================================ typedef CK_RV (*t_SAPI_Server_Unblock)(CK_CHAR_PTR pPin, CK_ULONG ulPinLen, CK_VOID_PTR pChallenge, CK_VOID_PTR pResponse); t_SAPI_Server_Unblock f_SAPI_Server_Unblock = NULL; HINSTANCE hLib = LoadLibrary("etsapi.dll"); if (!hLib) leave("Cannot load etsapi.dll"); (FARPROC&)f_SAPI_Server_Unblock = GetProcAddress(hLib, "SAPI_Server_Unblock"); if (!f_SAPI_Server_Unblock) leave("SAPI_Server_Unblock not found"); CK_CHAR SO_Pass[] = {"123456"}; CK_VOID_PTR pChallengeStr; char * ChallengeStr[] = {"2E0C207017D0AA2D"}; //это последовательность символов, сгенерированная eToken Properties pChallengeStr = ChallengeStr; unsigned char pResponseStr[9] = {0}; f_SAPI_Server_Unblock(SO_Pass, sizeof(SO_Pass), pChallengeStr, &pResponseStr); std::cout << std::hex; for(size_t i = 0; i < 9; ++i) { std::cout << "0x" << (unsigned int)pResponseStr[i] << " "; } std::cout << std::endl; Подскажите, плиз, вариант решения или ткните носом в ошибки в коде, так как С знаю не очень хорошо... | ||||
Ответы: | ||||
| ||||
up | ||||
| ||||
Блин, столкнулся с такой же проблемой, а TMS покупать неохота. Неужели никто не пробовал этот функционал? | ||||
| ||||
попробуйте задать так: BYTE ChallengeStr[] = {0x2E, 0x0C, 0x20, 0x70, 0x17, 0xD0, 0xAA, 0x2D }; | ||||
| ||||
Спасибо большое! Работает. | ||||