Разница в службе криптографии Windows между VC ++ 6.0 и VS 2008 - PullRequest
0 голосов
/ 22 марта 2012

У меня есть класс шифрования, разработанный в Microsoft Visual C ++ 6.0, и он работает правильно.Я перенес код в Microsoft Visual Studio 2008, этот класс работает, но с другим поведением.

Когда я передаю определенную строку для шифрования, результат шифрования, сгенерированный в скомпилированном коде в Visual C ++ 6.0отличается от Visual Studio 2008 и не должно происходить.

Может кто-нибудь помочь мне понять, почему это происходит?

Используемые функции шифрования служб Windows:

HCRYPTPROV hProv;
HCRYPTHASH hHash;
HCRYPTHASH hKey;
CString strDataKey;
DWORD dwSize;
DWORD dwSizeEncrypted;
BYTE * aszEncryptedBuffer;

......... (Другие коды .....) .......

CryptAcquireContext (& hProv, NULL, MS_STRONG_PROV, PROV_RSA_FULL, 0);

CryptCreateHash (hProv, CALG_MD5, 0, 0, & hHash);

CryptHashData (hHash, (const unsigned char *) strDataKey, dwSize, 0);

CryptDeriveKey (hProv, CALG_RC2, hHash, CRYPTDERIVEKEY_FLAG, & hKey);

aszEncryptedBuffer = new BYTE[dwSizeEncrypted];

memcpy(aszEncryptedBuffer,"Data to be encrypted",dwSize);

CryptEncrypt (hKey, 0, TRUE, 0, aszEncryptedBuffer, & dwSize, dwSizeEncrypted);

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

1 Ответ

2 голосов
/ 25 марта 2012
CryptHashData (hHash, (const unsigned char *) strDataKey, dwSize, 0);

Это убийственный состав, который у вас есть. CString имеет оператор преобразования для const TCHAR*, но не для const unsigned char*. Это имеет тенденцию работать случайно, но вам легко не повезет. Вы не можете конвертировать из одного строкового представления в другое с помощью приведения. Например, когда CString хранит строку Unicode. Это делается с настройками проекта VS2008 по умолчанию. Проект + Свойства, Общие, Набор символов. Также рассмотрите wcstombs () или WideCharToMultiByte (), чтобы сделать реальное преобразование. Кодовая страница, в которую вы преобразуете, может повлиять на полученную строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...