Ключевое слово в защите информации
ключевое слово
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход. Новые регистрации запрещены.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Neumann  
#1 Оставлено : 26 сентября 2011 г. 19:57:41(UTC)
Neumann

Статус: Новичок

Группы: Участники
Зарегистрирован: 26.09.2011(UTC)
Сообщений: 4

Добрый день.

Вопрос по CryptoAPI.

Никак не пойму, как это работает.

Последовательно вызывал
CryptAcquireContext
CryptCreateHash
CryptHashData
CryptSignHash

На последнем была ошибка (возвращ. ноль). Номер ошибки GetLastError показывал что-то на ключ.
Где-то писали, что нужно CryptGenKey. Стал вызывать его после CryptAcquireContext - и CryptSignHash уже не ругается на ошибку.

Однако вот что странно.
Когда я потом убрал CryptGenKey, то программа все равно работала - но только на той системе, где я хотя бы раз запускал с CryptGenKey. И даже после перезагрузки так. Такое ощущение, что CryptGenKey где-то зарегистрировала в системе, что нужно генерировать для этого ключа. Удивительно.

Ну, и в принципе эта генерация не нужна. Ведь получается, что я потом буду получать каждый раз разный хеш, так ведь? Или ключ каждый раз разный, а хеш будет все равно как надо?

У меня RSA-SHA1.

Буду очень благодарен за любую помощь. :)

Boo hoo!

Отредактировано пользователем 26 сентября 2011 г. 19:59:39(UTC)  | Причина: Не указана

Offline Kirill Sobolev  
#2 Оставлено : 26 сентября 2011 г. 20:42:41(UTC)
Кирилл Соболев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
А какую задачу Вы решаете?
Цитата:
CryptSignHash

Это операция подписи, а не хеширования, и для нее действительно необходим закрытый ключ.
Цитата:
Когда я потом убрал CryptGenKey, то программа все равно работала - но только на той системе, где я хотя бы раз запускал с CryptGenKey. И даже после перезагрузки так. Такое ощущение, что CryptGenKey где-то зарегистрировала в системе, что нужно генерировать для этого ключа. Удивительно.

CryptGenKey создал ключ, а потом в CryptAcquireContext Вы каждый раз к нему обращались.
Техническую поддержку оказываем тут
Наша база знаний
Offline Neumann  
#3 Оставлено : 26 сентября 2011 г. 21:32:47(UTC)
Neumann

Статус: Новичок

Группы: Участники
Зарегистрирован: 26.09.2011(UTC)
Сообщений: 4

Кирилл, спасибо за ответ.

Kirill Sobolev написал:
А какую задачу Вы решаете?

Я... наверное перепутал. :) Мне нужен не хеш, а сигнатура, а для нее нужен ключ. Причем он у меня вроде есть) Я так понимаю, я должен использовать CryptExportKey?

Kirill Sobolev написал:
CryptGenKey создал ключ, а потом в CryptAcquireContext Вы каждый раз к нему обращались.

Т.е. даже то, что я перекомпилировал программу (без CryptGenKey) - это не влияет? Ключ как-то остается в системе? Точнее не один ключ, а каждый раз генерируется новый. Я вот не пойму - каким образом. В программе, в которой уже нет CryptGenKey.
Offline Kirill Sobolev  
#4 Оставлено : 27 сентября 2011 г. 13:57:27(UTC)
Кирилл Соболев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Цитата:
Причем он у меня вроде есть) Я так понимаю, я должен использовать CryptExportKey?

Зависит от того где он есть, но не CryptExportKey, а CryptImportKey скорее.
Цитата:
Ключ как-то остается в системе? Точнее не один ключ, а каждый раз генерируется новый. Я вот не пойму - каким образом.

Грубо говоря, он сохранен на жестком диске.
Техническую поддержку оказываем тут
Наша база знаний
Offline Neumann  
#5 Оставлено : 27 сентября 2011 г. 16:50:19(UTC)
Neumann

Статус: Новичок

Группы: Участники
Зарегистрирован: 26.09.2011(UTC)
Сообщений: 4

Kirill Sobolev написал:

Зависит от того где он есть, но не CryptExportKey, а CryptImportKey скорее.

Да, действительно. :)

Kirill Sobolev написал:

Грубо говоря, он сохранен на жестком диске.

Но получается, что не он сохранен, а его "генерация". Результат ведь каждый раз разный.
Получается, теперь он всегда будет для этой программы генерировать? Или вообще для всех?

Но все равно это как-то странно. Один раз скомпилировал и выполнил с CryptGenKey и получаешь "пожизненную" генерацию. И уже сколько бы ты раз не перекомпилировал без CryptGenKey и не запускал программу - на этой системе он будет генерироваться. Я не вижу в этом смысла Brick wall
Offline Kirill Sobolev  
#6 Оставлено : 27 сентября 2011 г. 18:07:25(UTC)
Кирилл Соболев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Цитата:
Результат ведь каждый раз разный.

Результат чего?
Техническую поддержку оказываем тут
Наша база знаний
Offline Neumann  
#7 Оставлено : 27 сентября 2011 г. 20:06:28(UTC)
Neumann

Статус: Новичок

Группы: Участники
Зарегистрирован: 26.09.2011(UTC)
Сообщений: 4

CryptSignHash
Offline Kirill Sobolev  
#8 Оставлено : 27 сентября 2011 г. 20:29:21(UTC)
Кирилл Соболев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
А хэш получается одинаковый?
Как вызываются CryptAcquireContext и CryptGenKey?
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.