![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
tofreesky |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 9.6.2010 Репутация: нет Всего: нет |
Вы вопроса не видите что ли? Все что вы говорите понятно, но так где в вашем коде приватный ключ? Одним и тем же расшифровывается.
|
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Гм. По-моему, так это Вы ответа не видите. А ещё говорите понятный код(((( Код не мой. А приватный ключ получаем через вызов CryptGetUserKey. Добавлено через 42 секунды Им расшифровывается сессионный ключ. Добавлено через 5 минут и 3 секунды То, что Вы нагородили с "key_pub.rsa" и "key_prv.rsa" - совершенно неверно, так как в случае дешифровки публичный ключ нужен только для проверки подписи. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
tofreesky |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 9.6.2010 Репутация: нет Всего: нет |
Там мне нужно одним ключом(публичным) шифровать, а приватным расшифровывать. Обычная схема. Только в вашем(моем) коде используется один ключ для всего. А мне нужно два отдельных.
|
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Да нет же. Используются и открытый, и приватный ключи.
Так не делают. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
tofreesky |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 9.6.2010 Репутация: нет Всего: нет |
Где же? Видно что экспортируется публичный ключ.
Лол. А как делают? Извините, но, вы вообще о асимметричной криптографии не слышали походу.... Добавлено через 2 минуты и 15 секунд Ассиметричное шифрование (криптография с открытым ключом) - асимметричная схема, в которой применяются пары ключей: открытый ключ (public key), который зашифровывает данные, и соответствующий ему закрытый ключ (private key), который их расшифровывает. Открытый ключ можно распространить хоть по всему миру, в то время как закрытый держится в тайне. Любой человек с копией открытого ключа может зашифровать информацию, которую сможет прочитать только владелец закрытого ключа. Кто угодно. Даже люди, с которыми вы прежде никогда не встречались. |
||||
|
|||||
feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Так можно, но так не делают:
Использование Crypto API Поражён Вашими знаниями ![]() Мдя. Экспортируется публичный ключ "для обмена". Это значит, что Вы можете файл с незашифрованным публичным ключом перенести на другую инсталляцияю ОС и с помощью него зашифровывать данные, которые может расшифровать только владелец приватного ключа. Но не "им зашифровывать", а "с помощью него зашифровывать", так как схема более изощрённая. Экспорт приватного ключа для расшифровки данных не имеет смысла. Схема зашифровки файла:
Схема расшифровки файла:
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
tofreesky |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 9.6.2010 Репутация: нет Всего: нет |
Откуда его берут? |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Как откуда??? Из локального контейнера ключей! Как Вы думаете, что кроме всего делает функция CryptAcquireContext?
Если контейнера ключей с именем, совпадающим с именем текущего пользователя (второй аргумент функции - NULL), не существует, то создадим его (на что указывает флаг CRYPT_NEWKEYSET). Если задать флаг CRYPT_DELETEKEYSET, то можно удалить этот контейнер. Именно в этом контейнере хранятся пары открытый/закрытый ключ (AT_KEYEXCHANGE или AT_SIGNATURE). -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
feodorv |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Не поленился воспользоваться советом volatile:
Ну и немного изменил код, убив всякое упоминание о "key.rsa". Генерация ключей
Шифрование файла
Дешифрование файла
Заголовочный файл utils.h
Код рабочий, хотя я и мог где-нибудь напортачить))) Как видно, при шифровании и дешифровании файла вызывается одна и та же функция CryptGetUserKey( hProv, AT_KEYEXCHANGE, &hPubKey или &hPrivKey), в реальности возвращающая сразу пару ключей. В зависимости от функции используется либо открытый, либо закрытый ключ. В MS-коде просто подчеркнули использование публичного ключа для шифрования, чтобы не было никаких сомнений, а вот использование приватного ключа не столь очевидно. ![]() Это сообщение отредактировал(а) feodorv - 10.2.2012, 00:58 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||||||
|
|||||||||
xvr |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Так, сугубо для уточнения - этой программой (и с закрытым ключем) вы сможете расшифровать файл только на той машине, где его шифровали. Если же вам нужно расшифровывать его на другой машине, то туда нужно будет перенести этот самый KEYSET (или сменить способ шифрования и обмена ключами) |
||||
|
|||||
tofreesky |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 9.6.2010 Репутация: нет Всего: нет |
Мне не нужно хранить ключи в контейнерах, мне нужно два файла на жестком диске публичный ключ и приватный ключ.
Публичным шифровать, а приватным расшифровывать. Так видимо на криптоапи сделать невозможно. |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Что именно диктует такую необходимость? -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
tofreesky |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 9.6.2010 Репутация: нет Всего: нет |
Как мне отдавать пользователям публичный ключ, и носить с собой программу работающую с приватным ключом?
|
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Это возможно, схему распишу немного позже. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Бр, устал бороться, экспорт работает, импорт - нет ((( Ошибка NTE_BAD_VER... Хотя вряд ли это с криптопровайдером связано)))
Экспорт:
Импорт:
Это сообщение отредактировал(а) feodorv - 28.5.2014, 18:52 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |