CryptStringToBinary не работает с завершенной строкой NULL. Зачем? - PullRequest
0 голосов
/ 04 июля 2010

Кто-нибудь знает, почему этот код не работает?

 #include "stdafx.h"
#include <windows.h>
#include <WinCrypt.h>


int _tmain(int argc, _TCHAR* argv[])
{
wchar_t *bin = TEXT("ProductID:1233===>55555");
BYTE out2[1000];
DWORD olen;
olen = 1000;

if (CryptStringToBinary(bin, 0, 1, out2, &olen, 0, 0) == 0)
{
    wprintf(TEXT("Failure\n"));
}
else
{
//wprintf(TEXT("rn%s\n"),out2);
    wprintf(TEXT("Success\n"));
}
system("pause");
    return 0;
}

Заранее большое спасибо!

Tom

1 Ответ

1 голос
/ 04 июля 2010

Поскольку вы указали длину (параметр 2), равную 0?

Редактировать: Просто чтобы прояснить наше возможное решение в комментариях ниже, код в исходном вопросе (после редактирования) содержал две ошибки:

  1. Звонил CryptBinaryToString вместо CryptStringToBinary. Поскольку неверно передавать 0 во втором параметре в CryptBinaryToString, функция не работает.
  2. Он передавал 1 в третьем параметре (dwFlags), который интерпретируется как CRYPT_STRING_BASE64. Поскольку строка для шифрования отсутствовала в базе 64 (она содержала недопустимые символы, такие как ':'), функция не выполнялась. Как правило, передача необработанного значения вместо использования существующего определения (например, CRYPT_STRING_BASE64) не является хорошей идеей.
...