CryptStringToBinary不使用NULL终止字符串。为什么?

时间:2010-07-04 17:53:56

标签: windows cryptoapi

有谁知道为什么这段代码不起作用?

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

非常感谢你!

汤姆

1 个答案:

答案 0 :(得分:1)

因为您指定的长度(参数2)为0?

修改:为了在下面的评论中澄清我们的最终解决方案,原始问题中的代码(自编辑后)包含两个错误:

  1. 正在调用CryptBinaryToString而不是CryptStringToBinary。由于将第二个参数中的0传递给CryptBinaryToString无效,因此该函数失败。
  2. 它在第三个参数(dwFlags)中传递1,被解释为CRYPT_STRING_BASE64。由于要加密的字符串不在base 64中(它包含无效字符,如':'),因此该函数失败。通常,传递原始值而不是使用现有定义(例如CRYPT_STRING_BASE64)并不是一个好主意。