2010-07-04 59 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

相关问题