08.07.2005 10:45:41Программное задание пароля Ответов: 7
Alex
Доброе время суток.
Использую функцию CryptSetProvParam(HCRYPTPROV hProv,DWORD dwParam,BYTE* pbData,DWORD dwFlags) с dwParam равным PP_KEYEXCHANGE_PIN для программного задания пароля.Непонятно следущее при первом вызове функции при неправильно заданном пароле она возвращает True при правильном тоже True.После того как пароль задан правильно при последующих вызовах с неправильным паролем возвращается False. Чем объясняется такое неодназначное поведение? И как можно одназначно определить по возвращаемому значение верно или неверно задан пароль?
 
Ответы:
08.07.2005 12:02:14maxdm
Никак нельзя определить по возвращаемому значению правильный пин или нет. Но при вызове фукций для работы с секретным ключом при неправильном пине вернется ошибка.
08.07.2005 12:31:53alex
А какую функцию можно использовать для получения это ошибки, чтобы при этом не вызывался стандартный UI(окошечка с сообщением о неправильном пароле и полем ввода) так как в коде осуществляется подмена стандартного UI собственным интерфейсом?
08.07.2005 12:47:42maxdm
Чтобы не было окон, поставить CRYPT_SILENT в AquireContext.
CryptExportKey(), CryptSignHash()
08.07.2005 14:16:16alex
Ставля в CryptAcquireContext флаг CRYPT_SILENT а при вызове CryptSignMessage все равно вываливается окно с запросм пароля.
Операционка XP вроде поддержка этого флага есть
08.07.2005 14:54:25Василий
CryptSignMessage сама вызывает CryptAcquireContext для доступа к секретному ключу, соответствующему сертификату.
08.07.2005 15:53:43alex
А как нибудь задать параметры для этого автоматического вызова CryptAcquireContext можно?(в частности флаг CRYPT_SILENT :-))
08.07.2005 17:24:31Василий
параметр dwFlags структуры CRYPT_SIGN_MESSAGE_PARA задать в CRYPT_MESSAGE_SILENT_KEYSET_FLAG

Но!
Windows 2000/NT and Windows Me/98/95: CRYPT_MESSAGE_SILENT_KEYSET_FLAG flag is not supported