2010-07-04 2 views
0

누구든지이 코드가 작동하지 않는 이유를 알고 있습니까?CryptStringToBinary는 NULL로 끝나는 문자열로 작동하지 않습니다. 왜?

#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; 
} 

대단히 감사합니다.

+0

명확하게하기 위해 코드는 작동하지만 CryptBinaryToString은 항상 0을 반환합니다. –

답변

1

길이 (매개 변수 2)를 0으로 지정했기 때문에?

편집 :

  1. 대신 CryptStringToBinaryCryptBinaryToString 호출되었다 그냥 아래 코멘트에 우리의 궁극적 인 해결책을 명확히하기 위해, 원래의 질문에 코드 (편집부터) 두 가지 오류가 포함되어 있습니다. 두 번째 매개 변수에서 0을 CryptBinaryToString으로 전달하는 것은 유효하지 않으므로 함수가 실패했습니다.
  2. CRYPT_STRING_BASE64으로 해석되는 세 번째 매개 변수 (dwFlags)에서 1을 통과했습니다. 암호화 할 문자열이 기본 64가 아니기 때문에 (':'와 같은 잘못된 문자가 포함되어 있음) 함수가 실패했습니다. 일반적으로 기존 정의 (예 : CRYPT_STRING_BASE64)를 사용하는 대신 원시 값을 전달하는 것은 좋지 않습니다.
+0

lenght 매개 변수에 0을 지정하면 문자열은 null로 끝나는 문자열로 간주되므로 작동해야합니다. 이것은 실제로 제가 일하려고하는 것입니다. –

+0

예,하지만 CryptBinaryToString을 호출하고 있습니다. :-) –

+0

당신은 절대적으로 맞습니다, 고마워요. CryptStringToBinary를 사용하여 코드를 업데이트했으며 아직 작동하지 않습니다. 어떤 아이디어? –

관련 문제