CryptEncrypt дает разные результаты для разных языков

Когда я запускаю этот код в C ++ (показано), C # или VB6, я получаю разные результаты для pbBuffer в CryptEncrypt! Единственное, о чем я могу думать, это то, что CryptEncrypt основан на языке или параметры неверны для других функций. По какой другой причине это может произойти? Я передаю неверные параметры в CryptDeriveKey?

if (CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0))
{
if (CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash))
{
if (CryptHashData(hHash, (BYTE *)szLocalPassword, _tcslen(szLocalPassword), 0))
{
if (CryptDeriveKey(hProv, CALG_RC4, hHash, CRYPT_EXPORTABLE, &hKey))
{
dwLength = sizeof(TCHAR)*_tcslen(sUnencryptedString);
BYTE *pbBuffer = (BYTE *)malloc(dwLength);
if (pbBuffer != NULL)
{
// Convert TCHAR to BYTE
char c_szText[128] = {0};       // Any char
SIZE_T so = wcslen(sUnencryptedString) + 1;
wcstombs(c_szText, sUnencryptedString, so);
memcpy(pbBuffer, c_szText, dwLength);

if (CryptEncrypt(hKey, 0, TRUE, 0, pbBuffer, &dwLength, dwLength))

0

Решение

Это код VB, который показывает, как передать правильную информацию в API Crypto для шифрования строки в VB6. Надеюсь, кто-то может использовать эту информацию при поиске!

...
Dim bKeyRoot() As Byte
bKeyRoot = StrConv(sKeyRoot, vbFromUnicode)
lResult = CryptHashData(hHash, bKeyRoot(0), Len(sKeyRoot), 0)
...
Dim bText() As Byte
bText = StrConv(sText, vbFromUnicode)
lResult = CryptEncrypt(lKey, 0, 1, 0, bText(0), lClear, lData)
sText = StrConv(bText, vbUnicode)
0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector