Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Проблема с CryptoAPI


Автор: Solitaire 26.8.2009, 11:57
Здравствуйте.

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

- Сервер отсылает клиенту 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.


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

Заранее спасибо.

Автор: Solitaire 26.8.2009, 13:54
Все, отбой. Дело было в
Цитата

The ciphertext is returned in little-endian format.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)