Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с CryptoAPI 
V
    Опции темы
Solitaire
Дата 26.8.2009, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 10.7.2008

Репутация: нет
Всего: нет



Здравствуйте.

Нужно реализовать такую вещь.

- Сервер отсылает клиенту Public Key, созданный OpenSSL::PKey::RSA.generate(512)
- Клиент шифрует этим ключем логин и пароль пользователя и отправляет обратно на сервер. Клиент - виндовое приложение, используется CryptoAPI.

Код

HCRYPTKEY hKey;
::CryptAcquireContext( &hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT );
::CryptImportKey( hCryptProv, publicKeyBlob, blobSize, NULL, 0, &hKey ); // здесь всё нормально

::CryptEncrypt( hKey, NULL, TRUE, 0, NULL, &encryptPasswSize, 0 );
char* encryptedPassword = new char[ encryptPasswSize ];
strcpy_s( encryptedPassword, strlen( password ) + 1, password );
DWORD passwSize = strlen( password );
::CryptEncrypt( hKey, NULL, TRUE, 0, (BYTE*)encryptedPassword, &passwSize, encryptPasswSize );


- Сервер получает от клиента зашифрованный пароль. private_key.private_decrypt(crypted_message) - здесь получаем RSAError padding check failed.

На стороне сервера применяется PKCS #1 v1.5 padding.
Судя по следующему описанию CryptEncrypt из MSDN, по умолчанию также применяется PKCS #1.

Цитата

The Microsoft Enhanced Cryptographic Provider supports direct encryption with  RSA  public keys and decryption with RSA  private keys. The encryption uses PKCS #1  padding. On decryption, this padding is verified. The length of plaintext data that can be encrypted with a call to CryptEncrypt with an RSA key is the length of the key modulus minus eleven bytes. The eleven bytes is the chosen minimum for PKCS #1 padding. The ciphertext is returned in  little-endian format.


В чем здесь может быть проблема?

Заранее спасибо.
PM MAIL   Вверх
Solitaire
Дата 26.8.2009, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 10.7.2008

Репутация: нет
Всего: нет



Все, отбой. Дело было в
Цитата

The ciphertext is returned in little-endian format.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0680 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.