31.07.2003 19:44:10Специалисты, помогите! Ответов: 0
Михаил
Господа, помогите решить следующую задачу. Существует код на C# :
RC2CryptoServiceProvider rc2 = new RC2CryptoServiceProvider();
ICryptoTransform ct = rc2.CreateDecryptor(str, vec);
try
{
data = ct.TransformFinalBlock(data, 0, 8);
}
catch
{
...
}
где str - массив из 16 байтов, vec-массив из 8 байтов, data - массив из 10 байтов.
Необходимо написать эквивалент этого фрагмента кода на C++ (без managed extensions). Как я понимаю надо использовать CryptAPI примерно следующим образом :

//--- Получить handle провайдера
CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0);
//--- Создать hash
CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash);
//--- Загрузить содержимое ключа в hash
CryptHashData(hHash, str, 16, 0);
//--- Создать ключ
CryptDeriveKey(hProv, CALG_RC2, hHash, CRYPT_NO_SALT, &hKey);
//--- Задать инициализирующий вектор
CryptSetKeyParam(hKey, KP_IV, vec, 0);
//--- Расшифровать
dwCount = 8;
CryptDecrypt(hKey, 0, TRUE, 0, (BYTE*)data, &dwCount);

Не работает... Я новичок в данной области программирования, подскажите что в C++ коде неверно?
Заранее спасибо.
С уважением
Михаил