Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.10.2011(UTC) Сообщений: 40 Откуда: Moscow
|
Здравствуйте. Используем КриптоПро .Net для шифрования/дешифрования документов. При дешифровании используется такой код: var gostCert = (Gost3410CryptoServiceProvider) certificate.PrivateKey; gostCert.SetContainerPassword(pwd);
// проверка пароля var info = gostCert.CspKeyContainerInfo; var cspParams = new CspParameters(info.ProviderType, info.ProviderName, info.KeyContainerName, info.CryptoKeySecurity, pwd); При обращении к info.CryptoKeySecurity происходит ошибка: Указан неправильный тип в System.Security.Cryptography.Utils.GetKeySetSecurityInfo(SafeProvHandle hProv, AccessControlSections accessControlSections) в System.Security.Cryptography.CspKeyContainerInfo.get_CryptoKeySecurity() Проверили сертификат через CSP с ним все ок. С чем может быть связана такая ошибка? Текущая версия КриптоПРО CSP: версия ядра СКЗИ: 3.6.5365 КС1 версия продукта: 3.6.7777 Текущая версия КриптоПро Net сервер: 1.0.5425.0
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,433  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 38 раз Поблагодарили: 737 раз в 634 постах
|
Значит не умеет с нашим провайдером работать CryptoKeySecurity. А зачем? Проверить пин можно, выполнив операцию с секретным ключом, - подписать или расшифровать. Отредактировано пользователем 28 июля 2015 г. 19:02:16(UTC)
| Причина: Не указана |
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.10.2011(UTC) Сообщений: 40 Откуда: Moscow
|
Приведу полный код проверки пароля. Обращение к CryptoKeySecurity необходимо для задания флага CspProviderFlags.NoPrompt, чтобы если пароль неверный вылетала ошибка, а не открывалась ui окошко с повторным вводом пароля. Код: var pwd = new SecureString(); foreach (var pwdChar in password) pwd.AppendChar(pwdChar);
var gostCert = (Gost3410CryptoServiceProvider) certificate.PrivateKey; gostCert.SetContainerPassword(pwd);
// проверка пароля var info = gostCert.CspKeyContainerInfo; var cspParams = new CspParameters(info.ProviderType, info.ProviderName, info.KeyContainerName, info.CryptoKeySecurity, pwd);
// окошко с вводом пароля не показываем, так как некому его вводить cspParams.Flags |= CspProviderFlags.NoPrompt; using (var gost = new Gost3410CryptoServiceProvider(cspParams)) { var dummyHash = new byte[32]; // если пароль неверный тут вылетим с ошибкой gost.SignHash(dummyHash); } Если возможно это как-то сделать без обращения к CryptoKeySecurity, было бы отлично.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,433  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 38 раз Поблагодарили: 737 раз в 634 постах
|
При запуске без прав Администратор имеем, то есть путь в принципе странный. Additional information: The process does not possess the 'SeSecurityPrivilege' privilege which is required for this operation. |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,433  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 38 раз Поблагодарили: 737 раз в 634 постах
|
gostCert.SetContainerPassword(pwd) лишнее. var cspParams = new CspParameters(info.ProviderType, info.ProviderName, info.KeyContainerName, null, pwd); так вполне работает. |
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close