2010-07-04 58 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; 
} 

非常感謝您提前!

Tom

+0

只是爲了澄清,代碼工作,但CryptBinaryToString總是返回0. – 2010-07-04 17:54:44

回答

1

因爲您指定了長度(參數2)0?

編輯:只是爲了澄清在下面的評論我們的最終解決,在原有問題的代碼(因爲編輯)包含了兩個錯誤:

  1. 有人打電話CryptBinaryToString代替CryptStringToBinary。由於將第二個參數中的0傳遞給CryptBinaryToString是無效的,因此該函數失敗。
  2. 它在第三個參數(dwFlags)中傳遞1,它被解釋爲CRYPT_STRING_BASE64。由於要加密的字符串不在64位(它包含諸如':'之類的無效字符),因此該函數失敗。通常,傳遞原始值而不是使用現有定義(例如,CRYPT_STRING_BASE64)並不是一個好主意。
+0

如果在lenght參數中指定0,則該字符串被認爲是以空字符結尾的字符串...所以它應該可以工作。這實際上是我正在努力工作。 – 2010-07-04 18:00:27

+0

是的,但你打電話CryptBinaryToString。 :-) – 2010-07-04 18:09:14

+0

你是絕對正確的,謝謝。我用CryptStringToBinary更新了代碼,但仍然無法正常工作。有任何想法嗎? – 2010-07-04 18:44:08

相關問題